Je me demandais, par exemple, lorsque je lance qtox
avec:
qtox &
Et puis fermez Terminal, qtox
se ferme avec elle. Cependant, lorsque vous exécutez etherape
en utilisant:
Sudo etherape &
La fermeture du terminal ne ferme pas et ne pose aucun problème à Etherape. Et parmi les différentes applications, il existe un comportement différent, certains se ferment quand un terminal le fait, d'autres pas, pourquoi? Pourquoi certains ferment-ils alors que d'autres ne le font pas? J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18.
Lorsque vous fermez un terminal, celui-ci 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 ne définit pas de gestionnaire pour le signal et informe le noyau (via un appel système tel que signal()
ou sigaction()
) qu’il souhaite gérer, le noyau exécute le gestionnaire par défaut du signal, qui dans le cas d’un signal SIGHUP consiste à terminer le processus.
Toutefois, lorsque vous exécutez une commande avec Sudo
name__, l'UID du processus Sudo
et de son processus enfant est défini sur 0
(root); en général, à moins que l'UID du processus qui envoie le signal soit 0
(racine) ou identique au processus cible, le noyau supprime le signal (c'est-à-dire qu'un processus ne peut pas envoyer de signaux à un processus appartenant à un autre utilisateur, sauf si le le processus d’envoi du signal appartient à root); C'est pourquoi un processus exécuté par l'utilisateur, tel que l'instance Bash exécutée par le terminal, ne peut pas SIGHUP un processus Sudo
et, en fin de compte, la fermeture d'un terminal n'affecte pas un processus démarré avec Sudo
name__.