Parece que no entiendo la regla de Bash para crear una subshell. Pensé que los paréntesis siempre crean una subshell, que se ejecuta como su propio proceso.
Sin embargo, este no parece ser el caso. En el fragmento de código A (a continuación), el segundo sleep
comando no se ejecuta en un shell separado (como lo determina pstree
otro terminal). Sin embargo, en el fragmento de código B, el segundo sleep
comando se ejecuta en un shell separado. La única diferencia entre los fragmentos es que el segundo fragmento tiene dos comandos entre paréntesis.
¿Podría alguien explicar la regla de cuándo se crean subcapas?
CÓDIGO SNIPPET A:
sleep 5
(
sleep 5
)
CÓDIGO SNIPPET B:
sleep 5
(
x=1
sleep 5
)
fork
y se crea un proceso hijo (para ejecutar comandos externos) llamandofork + exec
. Pero su primer párrafo sugiere que tambiénfork + exec
se requiere subshell. ¿Qué me estoy equivocando aquí?