Dieser Satz ist nicht sehr klar. Erstens Elternteil sollte Vorfahre , da der Prozess das Rohr der Einrichtung kann ein Elternteil oder ein Großelternteil , oder ein Grand-Enkel ... -grandparent, oder eine der kommunizierenden Prozesse. Zweitens bedeutet der Satz nicht "Wenn Sie eine Pipe wollen, muss es einen gemeinsamen Ahnenprozess geben", sondern "Wenn Sie eine Pipe wollen, muss ein gemeinsamer Ahnenprozess sie einrichten".
Unter der Haube baut ein Prozess ein Rohr mit sich selbst auf. Die Pipe ist ein Dateideskriptor wie jeder andere, genauer gesagt ein Paar von Dateideskriptoren, einer für jedes Ende. Der Prozess, der die Pipe erstellt hat, kann sie sofort verwenden, um Daten an sich selbst zu senden, obwohl dies selten nützlich ist (obwohl eine Self-Pipe ihre Verwendung hat).
Eine typische Redewendung besteht darin, dass ein Prozess eine Pipe einrichtet, dann einen untergeordneten Prozess aufteilt und ein Ende der Pipe im übergeordneten und das andere Ende der Pipe im untergeordneten Prozess schließt. Auf diese Weise können der übergeordnete und der untergeordnete Prozess in eine Richtung kommunizieren. Wenn die Prozesse eine bidirektionale Kommunikation benötigen, benötigen sie zwei Pipes (außer bei einigen Unix-Varianten, bei denen Pipes bidirektional sind).
Die Pipes werden wiederum von untergeordneten Elementen geerbt, sodass der Prozess, der die Pipe erstellt hat, möglicherweise nicht an der Kommunikation beteiligt ist. Eine Pipe in einer Shell, die zwischen zwei externen Befehlen erstellt wurde, ls | rot13
umfasst beispielsweise die folgenden Schritte:
- Die Schale erzeugt ein Rohr.
- Die Shell gibt einen Prozess vor. Das Kind schließt das Leseende der Pipe und ruft
execve
auf ls
.
- Die Shell gibt einen Prozess vor. Das Kind schließt das Schreibende der Pipe und ruft
execve
auf rot13
.
- Die Hülle schließt beide Enden des Rohrs und wartet, bis beide Teilprozesse beendet sind.
Wenn zwei vorhandene Prozesse miteinander kommunizieren möchten, können sie eine Named Pipe verwenden . (Nun, es wird auch ein Dateideskriptor übergeben , aber es ist nichts für schwache Nerven.)