Em geral, quando um processo se torna órfão (isto é, seu pai morre) ele é adotado pelo init.
A situação especial que você descreve provavelmente se aplica a um processo interativo quando seu terminal de controle é fechado (de Wikipedia ):
The SIGHUP signal is sent to a process when its controlling terminal is closed. It was originally designed to notify the process of a serial line drop. In modern systems, this signal usually means that controlling pseudo or virtual terminal has been closed.
Para evitar isso, os processos filhos devem bloquear o SIGHUP, portanto, na maioria dos casos, você precisa da cooperação do processo pai.
Se o processo pai for um shell ( bash
, csh
e semelhantes) e você desejar que os comandos executados não terminem quando o bash terminar, você poderá prefixar qualquer comando com nohup
(de info coreutils "nohup invocation"
) :
'nohup' runs the given COMMAND with hangup signals ignored, so that the command can continue running in the background after you log out.
Neste exemplo:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
não será eliminado quando o shell terminar e fechar o terminal de controle /dev/ttys000
.
Se um script de shell deve bloquear SIGHUP, use o arquivo trap
, conforme explicado aqui para bash
.