-
a | bconectaSTDOUTdeaeSTDINdebusando apenasdup/dup2. Ambos os comandos são executados em paralelo. -
a =(b)substitui o argumento porapor um nome de arquivo temporário.bserá executado antes dea, pois o arquivo temporário precisa ser criado antes de ser passado paraa -
a <(b)substitui o argumento porapor um canal nomeado.aebsão executados em paralelo. Agora é aí que fica um pouco complicado:•
bestá em segundo plano e não consegue ler o terminal. Você mesmo pode testá-lo usandostrace -p $PIDpara anexar ao seu segundo processo de gato para ver o processo.•
a, enquanto isso, tenta ler o pipe nomeado, mas não consegue ler nada, já quebnão pode ler.• Isso significa que você basicamente tem um deadlock no qual
atenta lerb, masbnão pode lerSTDINe não pode gravar ema
Mais informações sobre o processo em segundo plano e o terminal de homem bash :
To facilitate the implementation of the user interface to job control, the operating system maintains the notion of a current terminal process group ID. Members of this process group (processes whose process group ID is equal to the current terminal process group ID) receive keyboard-generated signals such as SIGINT. These processes are said to be in the foreground. Background processes are those whose process group ID differs from the terminal's; such processes are immune to keyboard-generated signals. Only foreground processes are allowed to read from or, if the user so specifies with stty tostop, write to the terminal. Background processes which attempt to read from (write to when stty tostop is in effect) the terminal are sent a SIGTTIN (SIGTTOU) signal by the kernel's terminal driver, which, unless caught, suspends the process.