Mengapa menjalankan `killall init` saat pengguna mengeluarkan saya?

12

Pada beberapa komputer yang menjalankan Ubuntu 14.XX, saya menjalankan perintah "killall init" sebagai pengguna, dan segera keluar. Saya bisa masuk kembali tanpa masalah. Kenapa ini? Apa yang terjadi di balik layar?

LAMBANG
sumber

Jawaban:

21

Pada sistem pemula yang baru, proses init sesi dimulai ketika Anda masuk menggunakan GUI. Karena Ubuntu menggunakan pemula, ada initproses untuk sesi Anda. Cobalah menggunakan pstree -ps $$terminal:

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

Jadi ketika Anda menjalankan killall init, Anda tidak membunuh initPID 1 (karena Anda tidak memiliki hak istimewa), tetapi sesi Anda init, yang akan menjadi PID 9526 dalam contoh ini.

Karena ini initadalah proses yang mengatur untuk sesi GUI Anda, mematikannya membunuh sesi Anda dan karena itu Anda keluar.

muru
sumber
Apakah killall selalu mengirim sinyal ke kerabat terdekat di pohon proses? Jika saya menjalankan perintah sebagai root (dengan sudo misalnya), apakah saya akan mendapatkan hasil yang sama, atau panik kernel?
Tim Seguine
1
@TimSeguine Seperti namanya, itu dikirim ke semua proses dengan nama ini. BTW, beberapa orang lebih suka pkilldaripada killallkarena killallbekerja sama sekali berbeda pada sistem lain seperti Solaris ...
glglgl
killallmembunuh semua. Maka nama.
orion
1
@TimSeguine Mengirim ke semua, tetapi jika Anda adalah pengguna biasa, Anda tidak dapat mengirim sinyal ke proses pengguna lain. Jadi itu hanya mempengaruhi yang ada di pohon proses Anda sendiri.
Barmar
Menjalankan killall initsebagai roottidak tampak seperti ide yang baik - terutama pada berguna sistem - saya pikir initmenyebabkan kernel panik jika mati karena tidak dimaksudkan untuk pernah mencapai returnpada akhir itu mainkode lingkaran.
SlySven