Pourquoi certains programmes exécutés à partir du terminal utilisent-ils '&' quand Terminal et d'autres pas?

27

Je me demandais, par exemple, quand je lance qtox avec:

qtox &

Et puis fermez Terminal, qtox se ferme avec lui. Cependant, lorsque vous exécutez etherape en utilisant:

sudo etherape &

Le terminal de fermeture ne ferme pas ou ne cause aucun problème à Etherape. Et parmi les différentes applications, il y a un comportement différent, certaines se ferment lorsque Terminal, d'autres pas, comment se fait-il? Pourquoi certains se ferment-ils quand les autres ne le font pas? J'utilise Ubuntu GNOME 15.10 avec GNOME 3.18.

    
posée kos 30.11.2015 - 17:20
la source

1 réponse

36

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 .

    
réponse donnée kos 30.11.2015 - 17:46
la source

Lire d'autres questions sur les étiquettes