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?


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.


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).


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.