Sortof, o pipeline funciona assim: ele primeiro executa o primeiro comando e depois o segundo comando no seu caso.
Isto é, vamos ter A|B como o comando dado. Então é incerto se A ou B começa primeiro. Eles podem começar exatamente no mesmo horário se houver várias CPUs. Um tubo pode conter uma quantidade indefinida, mas finita de dados.
Se B tentar ler o pipe, mas nenhum dado estiver disponível, B esperará até que os dados cheguem. Se B estivesse lendo de um disco, B poderia ter o mesmo problema e precisar aguardar até que uma leitura de disco fosse concluída. Uma analogia mais próxima seria a leitura de um teclado. Lá, B precisaria aguardar um usuário digitar. Mas em todos esses casos, B iniciou uma operação de "leitura" e deve esperar até que ela termine. Mas se B for um comando de tal forma que precise apenas de saída parcial de A , depois de um certo ponto em que B s nível de entrada seja atingido A será eliminado pelo SIGPIPE
Se A tentar gravar no tubo e o tubo estiver cheio, A deve esperar que algum espaço no tubo se torne livre. A poderia ter o mesmo problema se estivesse gravando em um terminal. Um terminal tem controle de fluxo e pode moderar o ritmo dos dados. Em qualquer caso, para A , iniciou uma operação de "gravação" e aguardará até que a operação de gravação seja concluída.
A e B estão se comportando como coprocessos, embora nem todos os coprocessos estejam se comunicando com um canal. Nenhum deles está no controle total do outro.