Кажется, я неправильно понимаю правило Bash для создания подоболочки. Я думал, что круглые скобки всегда создают подоболочку, которая запускается как собственный процесс.
Тем не менее, это не так. В фрагменте кода A (ниже) вторая sleep
команда не выполняется в отдельной оболочке (как определено pstree
в другом терминале). Тем не менее, в фрагменте кода В, вторая sleep
команда делает работать в отдельной оболочке. Единственная разница между фрагментами заключается в том, что второй фрагмент содержит две команды в скобках.
Может кто-нибудь объяснить, пожалуйста, правило, когда создаются подоболочки?
КОД СНИППЕТА А:
sleep 5
(
sleep 5
)
КОД СНИППЕТА B:
sleep 5
(
x=1
sleep 5
)
fork
а дочерний процесс (для выполнения внешних команд) создается путем вызоваfork + exec
. Но ваш первый параграф говорит о том, чтоfork + exec
это также называется subshell. Что я здесь не так делаю?