fork inicia um processo em segundo plano. Quando o processo em primeiro plano (aquele que chama fork ) termina, o shell de chamada é notificado e mostra um novo prompt. O shell é o pai do processo original em primeiro plano; não é o pai de qualquer processo bifurcado.
A ordem em que o processo original e o processo bifurcado são executados não é fixa, mas é improvável que se desvie de maneira relevante devido ao atraso de 2 segundos. Em seu teste, acontece que a linha do tempo era:
-
forko primeiro filho do processo original. -
forko segundo filho do primeiro filho. - O processo original imprime o
waitidtrace e inicia a chamadawaitpidpara aguardar o primeiro filho. - O primeiro filho imprime seu
exittrace e sai. - O processo original é notificado da morte do processo filho e sua
waitpidretornos de chamada. - O processo original imprime seu
will exittrace. - O shell é notificado de que o processo original foi encerrado e imprime seu prompt.
- Um pouco menos de dois segundos depois, a chamada
sleepno segundo filho é concluída e o segundo filho imprime seuhas parenttrace.
O shell não recebe qualquer notificação do último evento, porque não é o pai do processo de morrer. De qualquer forma, ele já está sendo exibido e está aguardando que você digite um novo comando; não teria motivos para fazer nada (se você estivesse digitando um comando, isso poderia ser prejudicial).