Mi sembra di fraintendere la regola di Bash per la creazione di una subshell. Ho pensato che le parentesi crea sempre una subshell, che funziona come un suo processo.
Tuttavia, questo non sembra essere il caso. Nel frammento di codice A (sotto), il secondo sleep
comando non viene eseguito in una shell separata (come determinato da pstree
in un altro terminale). Tuttavia, nello Snippet di codice B, il secondo sleep
comando viene eseguito in una shell separata. L'unica differenza tra gli snippet è che il secondo snippet ha due comandi tra parentesi.
Qualcuno potrebbe spiegare la regola per quando vengono creati i subshell?
CODICE SNIPPET A:
sleep 5
(
sleep 5
)
CODICE SNIPPET B:
sleep 5
(
x=1
sleep 5
)
fork
e il processo figlio viene creato (per eseguire comandi esterni) chiamandofork + exec
. Ma il tuo primo para suggerisce chefork + exec
è chiamato anche subshell. Cosa sto sbagliando qui?