¿Por qué la ejecución de `killall init` como usuario me desconecta?

12

En varias computadoras que ejecutan Ubuntu 14.XX, ejecuté el comando "killall init" como usuario y me desconecté inmediatamente. Podría volver a iniciar sesión sin problemas. ¿Por qué es esto? ¿Qué está pasando detrás de escena?

EMBLEMA
fuente

Respuestas:

21

En los sistemas Upstart más nuevos, se inicia un proceso de inicio de sesión cuando inicia sesión con la GUI. Como Ubuntu usa Upstart, hay un initproceso para su sesión. Pruébelo usando pstree -ps $$en una terminal:

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

Entonces, cuando ejecuta killall init, no está eliminando el initPID 1 (porque no tiene el privilegio), sino su sesión init, que sería PID 9526 en este ejemplo.

Dado que este inites el proceso de gobierno para su sesión de GUI, matarlo mata su sesión y, por lo tanto, se desconecta.

muru
fuente
¿Killall siempre envía la señal al pariente más cercano en el árbol de procesos? Si ejecuté el comando como root (con sudo por ejemplo), ¿obtendría el mismo resultado o un kernel panic?
Tim Seguine
1
@TimSeguine Como su nombre lo indica, se envía a todos los procesos con este nombre. Por cierto, algunas personas prefieren en pkilllugar de killallporque killallfunciona completamente diferente en otros sistemas como Solaris ...
glglgl
killallmata a todos. De ahí el nombre.
orion
1
@TimSeguine Se envía a todos, pero si eres un usuario común, no puedes enviar señales a los procesos de otros usuarios. Por lo tanto, solo afecta al que está en su propio árbol de procesos.
Barmar
Ejecutar killall initcomo rootno parece una buena idea, especialmente en un sistema útil , creo que initcausa un pánico en el núcleo si muere porque no está destinado a llegar a un returnfinal de su mainciclo de código.
SlySven