Frage Wie bekomme ich mehr Informationen über offene Pipes in / proc in Linux?


In Linux, wenn Sie graben /proc/<pid>/fd Oft sehen Sie Ausgaben wie:

lrwx------ 1 root root 64 Jul 30 15:14 0 -> /dev/null
lrwx------ 1 root root 64 Jul 30 15:14 1 -> /dev/null
l-wx------ 1 root root 64 Jul 30 15:14 10 -> pipe:[90222668]
lr-x------ 1 root root 64 Jul 30 15:14 11 -> pipe:[90222669]
l-wx------ 1 root root 64 Jul 30 15:14 13 -> pipe:[90225058]
lr-x------ 1 root root 64 Jul 30 15:14 14 -> pipe:[90225059]

Wie bekomme ich mehr Informationen über die offenen Rohre, zB welcher Prozess ist am anderen Ende?


48
2017-07-30 22:18


Ursprung


lsof, im Ganzen zu finden /proc ist langsam. Kann jemand eine effektivere Lösung anbieten? - pihentagy


Antworten:


Ähnlich wie andere Antworten, aber:

lsof | grep 90222668

Zeigt Ihnen beide Enden, da beide Enden die 'Pipe-Nummer' teilen.


40
2017-07-31 15:55



Ah natürlich. Funktioniert wie erwartet. Sie können sogar die Nummer des Dateideskriptors angeben, und welches Ende ist der Leser und welcher ist der Schreiber, indem Sie auf die 4. Spalte der Ausgabe schauen! - Kamil Kisiel
Ich denke, dass diese Zahl die Inode-Nummer der Pipe für Pipefs sein kann, die Sie nicht mounten können. Ich suche nach einer Möglichkeit, Inode zu Dateinamenzuordnungen zu bekommen, aber dies könnte der beste Weg sein. Übrigens, ich liebe diese Frage :-) - Kyle Brandt♦
Irgendwie funktioniert das nicht für mich. Alles, was es ausgibt, ist die Pipe selbst. - Rui Marques
Wenn Sie als Standardbenutzer lsof ausführen, erhalten Sie möglicherweise keine Informationen von allen Prozessen. Normalerweise haben Sie keine Berechtigung, das Verzeichnis / proc / <pid> / fd für alle Prozesse als Nicht-Root-Benutzer anzuzeigen. - Andre Holzner
Vielleicht möchten Sie auch verwenden lsof -n -P | grep 90222668 um unnötige Namenssuche zu vermeiden, die es beschleunigen sollte. - Wodin


Die einzige Möglichkeit, den Prozess am anderen Ende zu finden, besteht darin, alle Prozesse in / proc und seh zu durchlaufen, die diese Pipe verwenden (dh, die Symlinks in / proc / pid / fd zur selben Pipe-ID haben).


3
2017-07-31 00:45



Danke für den Tipp. Eine Möglichkeit, dies zu automatisieren, ist: ls -l /proc/*/fd/ | grep $PIPE_ID; ls -l /proc/*/fd/$FD | grep $PIPE_ID  Der erste ls-Befehl wird die Dateideskriptoren beider Enden der Pipe ausgeben, während der zweite die Prozess-ID liefert - Joao Costa


Die meisten Informationen, die ich kenne, um offene Rohre zu bekommen, sind

lsof|grep FIFO

Erzählt immer noch nur von einem Ende, fürchte ich.


1
2017-07-30 22:31



Das ist ungefähr das selbe, was ich von / proc ableiten kann, ich nehme an, dass lsof es vom selben Ort bekommt. - Kamil Kisiel