Различия между оболочками bash и ksh
Я всегда считал, что под-оболочка - это не дочерний процесс, а другая оболочка в том же процессе.
Я использую базовый набор встроенных модулей:
(echo "Hello";read)
На другом терминале:
ps -t pts/0
PID TTY TIME CMD
20104 pts/0 00:00:00 ksh
Таким образом, в kornShell (ksh) нет дочерних процессов.
Введите bash, похоже, он ведет себя по-разному, учитывая ту же команду:
PID TTY TIME CMD
3458 pts/0 00:00:00 bash
20067 pts/0 00:00:00 bash
Итак, дочерний процесс в bash.
Из чтения справочных страниц по bash становится очевидным, что для под-оболочки создается другой процесс, однако он подделывает $, что является хитрым.
Ожидается ли эта разница между bash и ksh, или я неправильно читаю симптомы?
Редактировать: дополнительная информация: Бегstrace -f
на bash и ksh на Linux показывает, что bash вызываетclone
дважды для образца команды (это не вызываетfork
). Так что Bash может использовать потоки (я пыталсяltrace
но это ядро сброшено!). KornShell не вызывает ниfork
vfork
ниclone