GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – /proc/pid/fd/x Linknummer?

Unter Linux in /proc/PID/fd/X , die Links für Dateideskriptoren, die Pipes oder Sockets sind, haben eine Nummer, wie:

l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839]
l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839]
lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925]
lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926]
lr-x------ 1 user user 64 Mar 24 00:05 5 -> pipe:[3142927]
l-wx------ 1 user user 64 Mar 24 00:05 6 -> pipe:[3142927]
lrwx------ 1 user user 64 Mar 24 00:05 7 -> socket:[3142930]
lrwx------ 1 user user 64 Mar 24 00:05 8 -> socket:[3142932]
lr-x------ 1 user user 64 Mar 24 00:05 9 -> pipe:[9837788]

Wie in der ersten Zeile:6839. Was repräsentiert diese Zahl?

Akzeptierte Antwort:

Das ist die Inode-Nummer für das betreffende Rohr oder die fragliche Muffe.

Eine Pipe ist ein unidirektionaler Kanal mit einem Schreibende und einem Leseende. In Ihrem Beispiel sieht es so aus, als würden FD 5 und FD 6 miteinander sprechen, da die Inode-Nummern gleich sind. (Vielleicht aber nicht. Siehe unten.)

Häufiger als zu sehen, wie ein Programm über eine Pipe mit sich selbst kommuniziert, ist ein Paar separater Programme, die miteinander kommunizieren, typischerweise weil Sie mit einer Shell eine Pipe zwischen ihnen einrichten:

shell-1$ ls -lR / | less

Dann in einem anderen Terminalfenster:

shell-2$ ...find the ls and less PIDs with ps; say 4242 and 4243 for this example...
shell-2$ ls -l /proc/4242/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 1 -> pipe:[222536390]
shell-2$ ls -l /proc/4243/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 0 -> pipe:[222536390]

Dies besagt, dass der Standardausgang von PID 4242 (FD 1, per Konvention) mit einer Pipe mit der Inode-Nummer 222536390 verbunden ist und dass der Standardeingang von PID 4243 (FD 0) mit derselben Pipe verbunden ist.

All das ist eine lange Art zu sagen, dass ls Die Ausgabe wird an less gesendet Eingabe.

Zurück zu Ihrem Beispiel:FD 1 und FD 2 sind es mit ziemlicher Sicherheit nicht miteinander sprechen. Höchstwahrscheinlich ist dies das Ergebnis der Verknüpfung von stdout (FD 1) und stderr (FD 2), sodass beide zum selben Ziel gelangen. Sie können das mit einer Bourne-Shell wie dieser tun:

$ some-program 2>&1 | some-other-program

Wenn Sie also in /proc/$PID_OF_SOME_OTHER_PROGRAM/fd herumgestöbert haben , finden Sie einen dritten FD, der an eine Pipe mit der gleichen Inode-Nummer angehängt ist, wie sie an die FDs 1 und 2 für some-program angehängt ist Beispiel. Dies könnte auch mit den FDs 5 und 6 in Ihrem Beispiel passieren, aber ich habe keine fertige Theorie, wie diese beiden FDs miteinander verbunden wurden. Sie müssten wissen, was das Programm intern tut, um das herauszufinden.

Siehe auch:Linux – Nur „interessante“ Einhängepunkte anzeigen / uninteressante Typen filtern?
Linux
  1. Untersuchen des Linux /proc-Dateisystems

  2. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  3. Linux – /proc/pid/environ nach Prozessstart ändern?

  4. Linux – /proc/mnt mit /proc/mounts verknüpfen?

  5. Linux – Anzahl der Prozessoren in /proc/cpuinfo?

Eine Anleitung zum Dateisystem „/proc“ unter Linux

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

Was ist die Datei /etc/passwd unter Linux?

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Wie entschlüsselt man /proc/pid/pagemap Einträge unter Linux?

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?