Diferenças de sub-shell entre bash e ksh
Eu sempre acreditei que um sub-shell não era um processo filho, mas outro ambiente de shell no mesmo processo.
Eu uso um conjunto básico de built-ins:
(echo "Hello";read)
Em outro terminal:
ps -t pts/0
PID TTY TIME CMD
20104 pts/0 00:00:00 ksh
Portanto, nenhum processo filho no kornShell (ksh).
Digite bash, parece se comportar de maneira diferente, dado o mesmo comando:
PID TTY TIME CMD
3458 pts/0 00:00:00 bash
20067 pts/0 00:00:00 bash
Então, um processo filho no bash.
A partir da leitura das páginas man do bash, é óbvio que outro processo é criado para um sub-shell, no entanto ele falsifica $, que é sneeky.
Essa diferença entre bash e ksh é esperada ou estou lendo os sintomas incorretamente?
Edit: informações adicionais: Runningstrace -f
no bash e ksh no Linux mostra que chama bashclone
duas vezes para o comando de amostra (ele não chamafork
). Então o bash pode estar usando threads (eu tenteiltrace
mas core esvaziado!). KornShell não chama nemfork
, vfork
nemclone
.