De um modo geral, quando um processo se torna órfão (ou seja, seu pai morre), ele é adotado pelo init.
A situação especial que você descreve provavelmente se aplica a um processo interativo quando o terminal de controle é fechado (da Wikipedia ):
O sinal SIGHUP é enviado para um processo quando seu terminal de controle é fechado. Foi originalmente projetado para notificar o processo de queda de linha serial. Nos sistemas modernos, esse sinal geralmente significa que o controle de pseudo ou terminal virtual foi fechado.
Para evitar isso, os processos filhos devem bloquear o SIGHUP, portanto, na maioria dos casos, você precisa de cooperação do processo pai.
Se o processo pai é um shell ( bash
, csh
e similares) e você quer comandos que você executa não terminar quando acabamentos festança, você pode prefixar qualquer comando com nohup
(a partir de info coreutils "nohup invocation"
):
'nohup' executa o COMMAND fornecido com os sinais de interrupção ignorados, para que o comando possa continuar em execução em segundo plano depois que você sair.
Neste exemplo:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
não será morto quando o shell terminar e fechar o terminal de controle /dev/ttys000
.
Se um script de shell bloquear o SIGHUP, use o builtin trap
, conforme explicado aqui para bash
.