Pourquoi est-ce que l'exécution de «killall init» en tant qu'utilisateur me déconnecte?

12

Sur plusieurs ordinateurs exécutant Ubuntu 14.XX, j'ai exécuté la commande "killall init" en tant qu'utilisateur et j'ai été immédiatement déconnecté. Je pouvais me reconnecter sans problème. Pourquoi est-ce? Que se passe-t-il dans les coulisses?

EMBLÈME
la source

Réponses:

21

Sur les systèmes Upstart plus récents, un processus d' initialisation de session est démarré lorsque vous vous connectez à l'aide de l'interface graphique. Comme Ubuntu utilise Upstart, il existe un initprocessus pour votre session. Testez-le en utilisant pstree -ps $$dans un terminal:

$ pstree -ps $$
init(1)───lightdm(1741)───lightdm(9511)───init(9526)───/usr/bin/termin(9570)─┬─gnome-pty-helpe(9734)                                                                                                                                                                                  
                                                                             └──zsh(7944)

Ainsi, lorsque vous exécutez killall init, vous ne tuez pas le initPID 1 (car vous n'avez pas le privilège), mais votre session init, qui serait le PID 9526 dans cet exemple.

Comme il inits'agit du processus de gouvernance de votre session GUI, le tuer tue votre session et vous êtes donc déconnecté.

muru
la source
Est-ce que killall envoie toujours le signal au parent le plus proche dans l'arbre de processus? Si j'exécutais la commande en tant que root (avec sudo par exemple), aurais-je le même résultat, ou une panique du noyau?
Tim Seguine
1
@TimSeguine Comme son nom l'indique, il est envoyé à tous les processus portant ce nom. BTW, certaines personnes préfèrent pkillau lieu de killallparce que killallfonctionne complètement différent sur d'autres systèmes tels que Solaris ...
glglgl
killalltue tout. D'où le nom.
orion
1
@TimSeguine Il envoie à tous, mais si vous êtes un utilisateur ordinaire, vous ne pouvez pas envoyer de signaux aux processus d'autres utilisateurs. Cela n'affecte donc que celui de votre propre arbre de processus.
Barmar
Exécuter killall initas rootne semble pas être une bonne idée - en particulier sur un système utile - je pense que cela initprovoque une panique du noyau s'il meurt car il n'est pas destiné à atteindre un returnà la fin de sa mainboucle de code.
SlySven