Je semble mal comprendre la règle Bash pour créer un sous-shell. Je pensais que les parenthèses créent toujours un sous-shell, qui fonctionne comme son propre processus.
Cependant, cela ne semble pas être le cas. Dans l'extrait de code A (ci-dessous), la deuxième sleep
commande ne s'exécute pas dans un shell séparé (comme déterminé par pstree
dans un autre terminal). Cependant, dans le Code Snippet B, la deuxième sleep
commande ne fonctionne dans une coque séparée. La seule différence entre les extraits est que le deuxième extrait a deux commandes entre parenthèses.
Quelqu'un pourrait-il expliquer la règle de création des sous-coquilles?
CODE SNIPPET A:
sleep 5
(
sleep 5
)
CODE SNIPPET B:
sleep 5
(
x=1
sleep 5
)
fork
et le processus enfant est créé (pour exécuter des commandes externes) en appelantfork + exec
. Mais votre premier paragraphe suggère que celafork + exec
est également nécessaire pour le sous-shell. Qu'est-ce que je me trompe ici?