No entanto, o pipeline funciona assim: primeiro executa o primeiro comando e depois o segundo comando no seu caso.
Ou seja, vamos ter A|Bo comando dado. Então é incerto se Aou Bcomeça primeiro. Eles podem começar exatamente ao mesmo tempo se houver várias CPUs. Um canal pode conter uma quantidade indefinida, mas finita, de dados.
Se B tentar ler do canal, mas nenhum dado estiver disponível, Besperará até que os dados cheguem. Se Bestava lendo um disco, Bpode ter o mesmo problema e precisar aguardar até que a leitura do disco termine. Uma analogia mais próxima seria a leitura de um teclado. Lá, Bseria necessário aguardar o usuário digitar. Mas em todos esses casos, B iniciou uma operação de "leitura" e deve esperar até que seja concluída. Mas se Bé um comando que precisa apenas de saída parcial A, após certo ponto em que Bo nível de entrada é atingido Aserá eliminado pelo SIGPIPE
Se Atentar gravar no tubo e o tubo estiver cheio, Aespere que haja espaço no tubo livre. Apoderia ter o mesmo problema se estivesse gravando em um terminal. Um terminal possui controle de fluxo e pode moderar o ritmo dos dados. De qualquer forma, para A, iniciou uma operação de "gravação" e aguardará até que a operação de gravação seja concluída.
Ae Bestão se comportando como co-processos, embora nem todos os co-processos se comuniquem com um canal. Nenhum deles está no controle total do outro.
-margumento.