サブシェルを作成するためのBashルールを誤解しているようです。かっこは常に独自のプロセスとして実行されるサブシェルを作成すると考えました。
しかし、これはそうではないようです。コードスニペットA(下記)では、2番目のsleep
コマンドは別のシェルで実行されません(pstree
別の端末で決定されます)。ただし、コードスニペットBでは、2番目のsleep
コマンドは別のシェルで実行されます。スニペットの唯一の違いは、2番目のスニペットが括弧内に2つのコマンドを持っていることです。
誰かがサブシェルを作成するときのルールを説明してもらえますか?
コードスニペットA:
sleep 5
(
sleep 5
)
コードスニペットB:
sleep 5
(
x=1
sleep 5
)
fork
で(外部コマンドを実行するために)子プロセスが作成されますfork + exec
。しかし、あなたの最初のパラグラフは、それfork + exec
がサブシェルとも呼ばれることを示唆しています。ここで何が間違っていますか?