When a process exits, all its children also die (unless you use NOHUP in which case they get back to init).
Isso está errado. Completamente errado. A pessoa dizendo que estava enganada ou confundiu uma situação particular com o caso geral.
Existem duas maneiras pelas quais a morte de um processo pode indiretamente causar a morte de seus filhos. Eles estão relacionados ao que acontece quando um terminal é fechado. Quando um terminal desaparece (historicamente porque a linha serial foi cortada devido a um desligamento do modem, atualmente geralmente porque o usuário fechou a janela do emulador de terminal), um sinal SIGHUP é enviado para o processo de controle em execução nesse terminal - normalmente, o shell inicial é iniciado nesse terminal. Conchas normalmente reagem a isso saindo. Antes de sair, os shells destinados ao uso interativo enviam o HUP para cada trabalho que eles iniciaram.
Iniciar um trabalho a partir de um shell com nohup
interrompe essa segunda fonte de sinais HUP porque o trabalho então ignorará o sinal e, portanto, não será informado de que morrerá quando o terminal desaparecer. Outras maneiras de quebrar a propagação de sinais HUP do shell para os jobs incluem o uso do disown
builtin do shell se ele tiver um (o job é removido da lista de tarefas do shell) e double forking (o shell lança um filho que lança um filho próprio e sai imediatamente; a concha não tem conhecimento de seu neto).
Novamente, os trabalhos iniciados no terminal não acontecem porque o processo pai (o shell) morre, mas porque o processo pai decide matá-los quando é dito para matá-los. E o shell inicial no terminal não morre porque seu processo pai morre, mas porque seu terminal desaparece (o que pode ou não coincidentemente ser porque o terminal é fornecido por um emulador de terminal que é o processo pai do shell).