Essa frase não é muito clara. Primeiro, os pais devem ser ancestrais , pois o processo de instalação do pipe pode ser um pai, um avô, um bisavô, um avô ou um dos processos de comunicação. Segundo, a frase não significa "se você deseja um canal, deve existir um processo ancestral comum", mas "se você deseja um canal, um processo ancestral comum deve configurá-lo".
Sob o capô, um processo estabelece um tubo consigo mesmo. O canal é um descritor de arquivo como outro qualquer, ou mais precisamente um par de descritores de arquivo, um para cada extremidade. O processo que criou o canal pode usá-lo imediatamente para enviar dados para si mesmo, embora isso raramente seja útil (embora um canal próprio tenha seu uso).
Um idioma típico é para um processo de configuração de um tubo, bifurcar um processo filho e fechar uma extremidade do tubo no pai e a outra extremidade do tubo no filho. Isso permite que o processo pai e filho se comunique em uma direção. Se os processos precisarem de comunicação bidirecional, eles precisarão de dois canais (exceto em algumas variantes unix onde os canais são bidirecionais).
Os tubos são herdados por vez por quaisquer filhos, portanto, o processo que criou o tubo pode não estar envolvido na comunicação. Por exemplo, um canal em um shell criado entre dois comandos externos, como ls | rot13
envolve as seguintes etapas:
- A concha cria um cano.
- O shell bifurca um processo. A criança fecha a extremidade leitura do tubo e chamadas
execve
on ls
.
- O shell bifurca um processo. A criança fecha a extremidade gravação do tubo e chama
execve
no rot13
.
- A concha fecha as duas extremidades do tubo e aguarda a saída de ambos os subprocessos.
Se dois processos existentes quiserem se comunicar, eles poderão usar um canal nomeado . (Bem, também há a descrição do arquivo passando , mas não é para os fracos de coração.)