Cette phrase n'est pas très claire. Tout d'abord, le parent doit être un ancêtre , car le processus de configuration du canal peut être un parent, ou un grand-parent, ou un grand-grand-… grand-parent, ou l'un des processus de communication. Deuxièmement, la phrase ne signifie pas «si vous voulez un tuyau, il doit exister un processus ancêtre commun», mais «si vous voulez un tuyau, un processus ancêtre commun doit le configurer».
Sous le capot, un processus établit un tuyau avec lui-même. Le canal est un descripteur de fichier comme les autres, ou plus précisément une paire de descripteurs de fichiers, un pour chaque extrémité. Le processus qui a créé le canal peut l'utiliser immédiatement pour envoyer des données à lui-même, bien que cela soit rarement utile (même si un canal automatique a son utilité).
Un idiome typique est pour un processus de configurer un tuyau, puis de bifurquer un processus enfant et de fermer une extrémité du tuyau dans le parent et l'autre extrémité du tuyau dans l'enfant. Cela permet au processus parent et enfant de communiquer dans une seule direction. Si les processus nécessitent une communication bidirectionnelle, ils ont besoin de deux canaux (sauf sur certaines variantes Unix où les canaux sont bidirectionnels).
Les canaux sont hérités à leur tour par tous les enfants, de sorte que le processus qui a créé le canal peut ne pas être impliqué dans la communication. Par exemple, un tuyau dans un shell créé entre deux commandes externes, comme ls | rot13
implique les étapes suivantes:
- La coque crée un tuyau.
- Le shell accélère un processus. L'enfant ferme l'extrémité lecture du tube et des appels
execve
sur ls
.
- Le shell accélère un processus. L'enfant ferme l'extrémité d'écriture du tube et appelle
execve
à rot13
.
- L'enveloppe ferme les deux extrémités du tuyau et attend la sortie des deux sous-processus.
Si deux processus existants souhaitent communiquer entre eux, ils peuvent utiliser un canal nommé . (Eh bien, il y a aussi un descripteur de fichier qui passe , mais ce n'est pas pour les faibles de cœur.)