Aninhar as chaves parece indicar que você está criando um nível adicional de escopo que requer que uma nova sub-shell seja invocada. Você pode ver esse efeito com a segunda cópia do Bash na sua saída ps -H
.
Apenas os processos estipulados no primeiro nível de chaves são executados dentro do escopo do shell Bash original. Todas as chaves aninhadas serão executadas em seu próprio shell Bash com escopo definido.
Exemplo
$ { { { sleep 20; } | sleep 20; } | ps -H; }
PID TTY TIME CMD
29190 pts/1 00:00:00 bash
5012 pts/1 00:00:00 bash
5014 pts/1 00:00:00 bash
5016 pts/1 00:00:00 sleep
5015 pts/1 00:00:00 sleep
5013 pts/1 00:00:00 ps
Retirando o | ps -H
do mix apenas para que possamos ver as chaves aninhadas, podemos executar ps auxf | less
em outro shell.
saml 29190 0.0 0.0 117056 3004 pts/1 Ss 13:39 0:00 \_ bash
saml 5191 0.0 0.0 117056 2336 pts/1 S+ 14:42 0:00 | \_ bash
saml 5193 0.0 0.0 107892 512 pts/1 S+ 14:42 0:00 | | \_ sleep 20
saml 5192 0.0 0.0 107892 508 pts/1 S+ 14:42 0:00 | \_ sleep 20
saml 5068 0.2 0.0 116824 3416 pts/6 Ss 14:42 0:00 \_ bash
saml 5195 0.0 0.0 115020 1272 pts/6 R+ 14:42 0:00 \_ ps auxf
saml 5196 0.0 0.0 110244 880 pts/6 S+ 14:42 0:00 \_ less
Mas espere mais!
Se você remover os canos e usar essa forma de comando, veremos o que você realmente espera:
$ { { { sleep 10; } ; { sleep 10; } ; sleep 10; } } | watch "ps -H"
Agora, na janela de exibição resultante, recebemos uma atualização a cada 2 segundos sobre o que está acontecendo:
Aqui está o primeiro sleep 10
:
PID TTY TIME CMD
29190 pts/1 00:00:00 bash
5676 pts/1 00:00:00 bash
5678 pts/1 00:00:00 sleep
5677 pts/1 00:00:00 watch
5681 pts/1 00:00:00 watch
5682 pts/1 00:00:00 ps
Aqui está o segundo sleep 10
:
PID TTY TIME CMD
29190 pts/1 00:00:00 bash
5676 pts/1 00:00:00 bash
5691 pts/1 00:00:00 sleep
5677 pts/1 00:00:00 watch
5694 pts/1 00:00:00 watch
5695 pts/1 00:00:00 ps
Aqui está o terceiro sleep 10
:
PID TTY TIME CMD
29190 pts/1 00:00:00 bash
5676 pts/1 00:00:00 bash
5704 pts/1 00:00:00 sleep
5677 pts/1 00:00:00 watch
5710 pts/1 00:00:00 watch
5711 pts/1 00:00:00 ps
Observe que todos os três períodos de inatividade, embora invocados em diferentes níveis de encadeamento, mantêm-se dentro do PID 5676 do Bash. Então eu acredito que o seu problema é auto-infligido com o uso de | ps -H
.
Conclusões
O uso de | ps -H
(ou seja, o canal) está causando um sub-shell adicional, portanto não use esse método ao tentar interrogar o que está acontecendo.