Wydaje mi się, że źle rozumiem zasadę Bash dotyczącą tworzenia podpowłoki. Myślałem, że nawiasy zawsze tworzą podpowłokę, która działa jako własny proces.
Wydaje się jednak, że tak nie jest. W fragmencie kodu A (poniżej) drugie sleep
polecenie nie działa w osobnej powłoce (określonej przez pstree
inny terminal). Jednak we fragmencie kodu B drugie sleep
polecenie działa w osobnej powłoce. Jedyną różnicą między fragmentami jest to, że drugi fragment zawiera dwa polecenia w nawiasach.
Czy ktoś mógłby wyjaśnić tę zasadę podczas tworzenia podpowłoki?
KOD SNIPPET A:
sleep 5
(
sleep 5
)
KOD SNIPPET B:
sleep 5
(
x=1
sleep 5
)
fork
a proces potomny jest tworzony (w celu wykonywania poleceń zewnętrznych) przez wywołaniefork + exec
. Ale twój pierwszy para sugeruje, żefork + exec
jest to również wymagane dla podpowłoki. Co się tutaj mylę?