Вывод pstree
вводит в заблуждение.
bash -c "sleep 10000 "
создает дочерний процесс bash. Но этот процесс не создает еще один дочерний процесс. Поскольку после запуска sleep
делать больше нечего, оболочка делает прямой переход с execve()
на sleep
без предварительного разветвления.
Поскольку это так быстро, вы просто видите результат после execve
в pstree
.
Но в
bash -c "sleep 10000; sleep 99999 "
случай, когда новый bash разветвляется дважды, по одному разу для каждой команды. Он также мог бы сделать execve
для последней команды вместо того, чтобы разветвляться первой. Я не знаю, почему это не так.
Это и случай с перенаправлением, вероятно, просто проблемы с обнаружением необходимости разветвления.