En términos generales, cuando un proceso se vuelve huérfano (es decir, su padre muere), es adoptado por init.
La situación especial que describe probablemente se aplica a un proceso interactivo cuando se cierra su terminal de control (de Wikipedia ):
La señal SIGHUP se envía a un proceso cuando su terminal de control está cerrado. Originalmente fue diseñado para notificar el proceso de una caída de línea en serie. En los sistemas modernos, esta señal generalmente significa que se ha cerrado el pseudo o terminal virtual de control.
Para evitar esto, los procesos secundarios deben bloquear SIGHUP, por lo que en la mayoría de los casos necesita la cooperación del proceso primario.
Si el proceso padre es un shell ( bash
, csh
y similares) y desea que los comandos se ejecutan no termina cuando termina de bash, se puede prefijar con cualquier comando nohup
(de info coreutils "nohup invocation"
):
'nohup' ejecuta el comando dado con las señales de bloqueo ignoradas, para que el comando pueda continuar ejecutándose en segundo plano después de cerrar sesión.
En este ejemplo:
$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;
find
no se matará cuando el shell termine y cierre el terminal de control /dev/ttys000
.
Si un script de shell debe bloquear SIGHUP, use el incorporado trap
, como se explica aquí para bash
.