Parece que eu entendi mal a regra do Bash para criar um subshell. Eu pensei que parênteses sempre cria um subshell, que roda como seu próprio processo.
No entanto, este não parece ser o caso. No Snippet de código A (abaixo), o segundo sleep
comando não é executado em um shell separado (conforme determinado por pstree
outro terminal). No entanto, no Snippet de código B, o segundo sleep
comando é executado em um shell separado. A única diferença entre os trechos é que o segundo trecho possui dois comandos entre parênteses.
Alguém poderia, por favor, explicar a regra para quando subcascas são criadas?
SNIPPET A DO CÓDIGO:
sleep 5
(
sleep 5
)
SNIPPET B DO CÓDIGO:
sleep 5
(
x=1
sleep 5
)
fork
e o processo filho é criado (para executar comandos externos) chamandofork + exec
. Mas o seu primeiro parágrafo sugere que tambémfork + exec
é necessário um subshell. O que estou errado aqui?