Cuando cierra un terminal, el terminal envía una señal SIGHUP al shell; el shell, a su vez, envía una señal SIGHUP a todos sus grupos de procesos secundarios, que incluyen grupos de procesos en segundo plano;
La forma en que cada proceso reaccionará a la señal depende totalmente del proceso: si el proceso no definió un controlador para la señal y le dijo al núcleo (a través de alguna llamada al sistema como signal()
osigaction()
) que desea manejarlo, el núcleo se ejecuta El controlador predeterminado para la señal, que en el caso de una señal SIGHUP consiste en terminar el proceso.
Sin embargo, cuando ejecuta un comando con sudo
, el UID del sudo
proceso y su proceso secundario se establece en 0
(root); en general, a menos que el UID del proceso que envía la señal sea 0
(raíz) o el mismo que el proceso de destino, el núcleo descarta la señal (es decir: un proceso no puede enviar señales a un proceso propiedad de otro usuario, a menos que el proceso enviar la señal es propiedad de root); Es por eso que un proceso ejecutado por el usuario, como la instancia de Bash ejecutada por el terminal, no puede APROVECHAR un sudo
proceso y, en última instancia, cerrar un terminal no afecta un proceso iniciado con sudo
.