Lorsque vous fermez un terminal, le terminal envoie un signal SIGHUP au shell; le shell, à son tour, envoie un signal SIGHUP à tous ses groupes de processus enfants, qui incluent des groupes de processus en arrière-plan;
La manière dont chaque processus réagira au signal dépend entièrement du processus: si le processus n’a pas défini de gestionnaire pour le signal et avertit le noyau (via un appel système tel que signal()
ou sigaction()
) qu'il souhaite le gérer, le noyau exécute le gestionnaire par défaut du signal qui, en cas de signal SIGHUP, consiste à terminer le processus.
Cependant, lorsque vous exécutez une commande avec sudo
, l'UID du processus sudo
et son processus enfant sont définis sur 0
(root); En général, à moins que l'UID du processus envoyant le signal soit 0
(root) ou identique au processus cible, le noyau rejette le signal (c'est-à-dire qu'un processus ne peut pas envoyer de signaux à un processus appartenant à un autre utilisateur) à moins que le processus envoyant le signal n'appartienne à root); c'est pourquoi un processus tel que l'instance Bash exécutée par le terminal ne peut pas exécuter un processus sudo
et, en fin de compte, la fermeture d'un terminal n'affecte pas un processus démarré avec sudo
.