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 sleepcomando não é executado em um shell separado (conforme determinado por pstreeoutro terminal). No entanto, no Snippet de código B, o segundo sleepcomando é 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
)
forke 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?