Wie kann ich mehr Informationen zu Open Pipes in / proc unter Linux erhalten?

53

Wenn Sie unter Linux /proc/<pid>/fdhäufig reingehen, sehen Sie folgende Ausgabe:

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 erhalte ich weitere Informationen zu den offenen Pipes, z. B. welcher Prozess ist am anderen Ende?

Kamil Kisiel
quelle
Das Finden des Ganzen /procist langsam. Kann jemand eine effektivere Lösung anbieten?
Mittwoch,

Antworten:

46

Ähnlich wie bei anderen Antworten, aber:

lsof | grep 90222668

Zeigt Ihnen beide Enden an, da beide Enden die Pipe-Nummer gemeinsam haben.

Kyle Brandt
quelle
3
Ah, natürlich. Funktioniert wie erwartet. Sie können sogar die Nummer des Dateideskriptors und das Ende des Lesers und des Schreibers anhand der 4. Ausgabespalte ermitteln!
Kamil Kisiel
Ich denke, diese Nummer könnte die Inode-Nummer der Pipe für Pipefs sein, die Sie nicht mounten können. Ich suche nach einer Möglichkeit, Inode zu Dateinamenzuordnungen zu erhalten, aber dies ist möglicherweise die beste Möglichkeit. Übrigens, ich liebe diese Frage :-)
Kyle Brandt
Irgendwie funktioniert das bei mir nicht. Alles was es ausgibt ist die Pipe selbst.
Rui Marques
Wenn Sie lsof als Standardbenutzer ausführen, erhalten Sie möglicherweise nicht alle Informationen zu allen Prozessen. Normalerweise haben Sie nicht die Berechtigung, als Benutzer ohne Rootberechtigung das Verzeichnis / proc / <pid> / fd aller Prozesse anzuzeigen.
Andre Holzner
5
Außerdem sollten Sie diese Option verwenden lsof -n -P | grep 90222668, um unnötige Namenssuchen zu vermeiden, die die Suche beschleunigen sollten.
Wodin
4

Der einzige Weg, um herauszufinden, welcher Prozess sich am anderen Ende befindet, besteht darin, alle Prozesse in / proc zu durchlaufen und zu sehen, welche diese Pipe verwenden (dh welche Symlinks in / proc / pid / fd zu derselben Pipe-ID haben).

bdonlan
quelle
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 Befehl ls gibt die Dateideskriptoren an beiden Enden der Pipe aus, während der zweite die Prozess-ID
ausgibt
2

Die meisten Informationen, die ich über offene Leitungen erhalten kann, sind

lsof|grep FIFO

Erzählt leider immer noch nur von einem Ende.

Chaos
quelle
Das ist ungefähr das Gleiche, was ich von / proc erraten kann, ich gehe davon aus, dass ich es von derselben Stelle bekomme.
Kamil Kisiel