Ich scheine die Bash-Regel zum Erstellen einer Subshell falsch zu verstehen. Ich dachte, Klammern erzeugen immer eine Subshell, die als eigener Prozess abläuft.
Dies scheint jedoch nicht der Fall zu sein. In Code-Snippet A (siehe unten) wird der zweite sleep
Befehl nicht in einer separaten Shell ausgeführt (wie von pstree
einem anderen Terminal festgelegt). In Code-Snippet B wird der zweite sleep
Befehl jedoch in einer separaten Shell ausgeführt. Der einzige Unterschied zwischen den Snippets besteht darin, dass das zweite Snippet zwei Befehle in Klammern enthält.
Könnte jemand bitte die Regel erklären, wann Subshells erstellt werden?
CODE SNIPPET A:
sleep 5
(
sleep 5
)
CODE SNIPPET B:
sleep 5
(
x=1
sleep 5
)
fork
und der untergeordnete Prozess wird durch Aufrufen erstellt (um externe Befehle auszuführen)fork + exec
. Aber Ihr erster Absatz legt nahe, dass dies auchfork + exec
als Subshell bezeichnet wird. Was mache ich hier falsch?