Sim. Bifurcação é soletrada &
:
echo child & echo parent
O que pode estar confundindo você é que $$
não é o PID do processo shell, é o PID do processo shell original . O ponto de tornar isso assim é que $$
é um identificador exclusivo para uma instância específica do script de shell: ele não é alterado durante a execução do script e é diferente de $$
em qualquer outro script em execução simultaneamente. Uma maneira de obter o PID real do processo do shell é sh -c 'echo $PPID'
.
O fluxo de controle no shell não é o mesmo que C. Se você escrever em C
first(); fork(); second(); third();
então um equivalente de shell é
after_fork () { second; third; }
first; after_fork & after_fork
O formulário shell simples first; child & parent
corresponde ao idioma usual C
first(); if (fork()) parent(); else child();
&
e $$
existem e se comportam dessa maneira em todos os shell estilo Bourne e em (t) csh. $PPID
não existia na shell Bourne orignal, mas está em POSIX (por isso está em cinza, bash, ksh, zsh,…).