Dies ist die Inode- Nummer für das betreffende Rohr oder die betreffende 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 ein Programm zu sehen, das über eine Pipe mit sich selbst kommuniziert, sind zwei separate Programme, die miteinander kommunizieren. Dies liegt normalerweise daran, dass Sie eine Pipe mit einer Shell 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, gemäß Konvention) mit einer Leitung mit der Inode-Nummer 222536390 verbunden ist und dass der Standardeingang von PID 4243 (FD 0) mit derselben Leitung verbunden ist.
All dies ist ein langer Weg zu sagen, dass ls
die Ausgabe an less
die Eingabe gesendet wird .
Zurück zu Ihrem Beispiel: FD 1 und FD 2 sprechen mit ziemlicher Sicherheit nicht miteinander. Dies ist höchstwahrscheinlich das Ergebnis der Verknüpfung von stdout (FD 1) und stderr (FD 2), sodass beide zum gleichen Ziel gelangen. Sie können dies mit einer Bourne-Shell wie folgt tun:
$ some-program 2>&1 | some-other-program
Wenn Sie sich also umsehen /proc/$PID_OF_SOME_OTHER_PROGRAM/fd
, finden Sie ein drittes FD, das an eine Pipe mit derselben Inode-Nummer angehängt ist, die für die some-program
Instanz an FDs 1 und 2 angehängt ist . Dies mag auch das sein, was in Ihrem Beispiel mit den FDs 5 und 6 passiert, aber ich habe keine fertige Theorie, wie diese beiden FDs miteinander verbunden wurden. Sie müssen wissen, was das Programm intern tut, um das herauszufinden.
pidgin
- es hatte eine Menge Rohre und Steckdosen und anderes Zeug, also war es ein schönes Beispiel. Eine letzte Frage: Inodes sind nur im Kontext eines bestimmten Dateisystems spezifisch, richtig? Wie in könnte ich Inode 3 in meinem/
Dateisystem und einen anderen (anderen) Inode 3 in meinem/boot
Dateisystem haben./proc
Dateisystems werden die Inode-Nummern einfach im laufenden Betrieb gebildet (sieheget_next_ino()
imfs/inode.c
Kernel), beginnend mit 0, wenn das System neu gestartet wird. Der Mechanismus, der sie macht wird von mehreren Linux impersistent Dateisystemen geteilt (proc, configfs, ramfs, autofs ...) , unter denen Inode - Nummern sind einzigartig , obwohl POSIX Semantik es nicht verlangen. Das ist jedoch ein ganz besonderer Fall. Die Regel, von der Sie sprechen, wird normalerweise in Verbindung mit normalen persistenten Dateisystemen wie ext3 verwendet.Für Sockets finden Sie weitere Informationen zur Inode in
/proc/net/tcp
,/proc/net/udp
oder/proc/net/unix
. Beispielsweise:Wir sehen, Inode ist 53710569.
In diesem Fall handelt es sich um einen Listening-Socket (keine Remote-Adresse), der den lokalen Port 27 (0x1B) überwacht. IP-Adressen sind 4 Byte in
inet_ntoa
hexadezimaler Schreibweise in "Netzwerknotation". Sie können die Funktion verwenden, um sie in die Standardnotation abcd (in diesem Fall 127.0.0.1) zu konvertieren.Beachten Sie, dass diese Dateien 0 Byte zu sein scheinen, aber Inhalt haben, wenn Sie sie lesen. Beachten Sie auch, dass
-a
dies bei grep erforderlich ist, da sie (z. B. beiunix
) als binär erscheinen können.quelle
/proc/net/tcp6
und/proc/net/udp6
für IPv6.