Perché eseguire `killall init` come utente mi disconnette?


12

Su più computer che eseguono Ubuntu 14.XX, ho eseguito il comando "killall init" come utente e sono stato immediatamente disconnesso. Potrei accedere di nuovo senza problemi. Perchè è questo? Cosa succede dietro le quinte?

Risposte:


21

Sui sistemi Upstart più recenti, un processo di avvio della sessione viene avviato quando si accede utilizzando la GUI. Poiché Ubuntu utilizza Upstart, esiste un initprocesso per la sessione. Provalo usando pstree -ps $$in un terminale:

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

Quindi, quando corri killall init, non stai uccidendo initPID 1 (perché non hai il privilegio), ma la tua sessione init, che sarebbe PID 9526 in questo esempio.

Poiché questo initè il processo di governo per la tua sessione della GUI, ucciderlo uccide la tua sessione e quindi sei disconnesso.


Killall invia sempre il segnale al parente più vicino nell'albero del processo? Se avessi eseguito il comando come root (ad esempio con sudo), avrei ottenuto lo stesso risultato o un panico nel kernel?
Tim Seguine,

1
@TimSeguine Come dice il nome, viene inviato a tutti i processi con questo nome. A proposito, alcune persone preferiscono pkillinvece killallperché killallfunziona completamente diverso su altri sistemi come Solaris ...
glglgl,

killalluccide tutto. Da qui il nome.
Orione,

1
@TimSeguine Invia a tutti, ma se sei un utente normale non puoi inviare segnali a processi di altri utenti. Quindi influenza solo quello nel tuo albero dei processi.
Barmar,

Eseguire killall initcome rootnon sembra una buona idea - specialmente su un sistema utile - penso che initcausi il panico del kernel se muore perché non è destinato a raggiungere mai un returnalla fine del suo mainciclo di codice.
SlySven,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.