Фоновое выполнение списка использует подоболочку, потому что что-то должно ждать каждого члена этого списка и запускать следующий. После создания списка исходная оболочка должна быть доступна для новых команд; он также не может управлять фоновым списком. bash не может делать больше одной задачи за раз. Итак, чтобы фоновый список работал, он запускает подоболочку.
Обратите внимание, что вы можете отказаться от фонового списка, и он продолжит работу, показывая, что подоболочка выполняет свою работу:
$ {
> sleep 1; sleep 2; sleep 3; sleep 4; sleep 5
> } &
$ disown
$ ps -f | grep sleep
dave 31845 31842 0 03:50 pts/1 00:00:00 sleep 3
dave 31849 31771 0 03:50 pts/1 00:00:00 grep sleep
Вы даже можете выйти из системы, и подоболочка продолжит запускать процессы из списка.
Когда вы выполняете одну команду в фоновом режиме, в подоболочке нет необходимости, потому что оболочке больше не нужно выполнять какую-либо работу после того, как она выполнила команду.
В вашем примере второй дополнительный подпроцесс bash, PID 1002, выглядит как сценарий, который вы выполняете. Это не связано (по крайней мере, концептуально) с механизмом создания списка; любой скрипт в отдельном файле имеет свой собственный процесс bash.
person
Dave Schweisguth
schedule
14.05.2016