Bagaimana systemd selamat dari kill -9?

28

Di antara pertanyaan "Mengapa 'kill -9 0' mengakhiri sesi konsol saya" dan "Bagaimana cara mendapatkan kernel kernel", saya mendapatkan bur di bawah pelana saya dan mencoba kill -9 1sebagian besar laptop Arch linux yang terbaru. Saya melakukannya sebagai ID pengguna "root".

Saya sepenuhnya mengharapkan beberapa jenis crash atau panik atau shutdown, tetapi tidak ada yang terjadi. Saya lakukan kill -9 1lagi, tanpa efek.

Mesin linux Arch berjalan systemdhari ini, jadi: bagaimana cara systemdbertahan dari kill -9? Saya berharap ada kode kasus khusus di kernel Linux 3.7, tapi mungkin ada alasan lain yang belum saya pikirkan.

Bagaimana dengan hal-hal lain yang dijalankan dengan PID 1? Slackware masih menggunakan initsaya percaya, tapi saya takut untuk mencobanya di server Slackware produksi saya. DD-WRT pada router nirkabel saya menjalankan / sbin / init.

Bruce Ediger
sumber

Jawaban:

33

Dari man 2 kill:

Satu-satunya sinyal yang dapat dikirim ke ID proses 1, proses init, adalah mereka yang init secara eksplisit telah menginstal penangan sinyal. Hal ini dilakukan untuk memastikan sistem tidak diturunkan secara tidak sengaja.

Artinya, adalah mungkin untuk initmelakukan apa pun yang disukainya setelah menerima SIGKILL(termasuk keluar), tetapi init systemd tidak menginstal pengatur sinyal apa pun untuk itu, jadi tidak ada yang terjadi.

Chris Down
sumber
4
Terima kasih telah memperhatikan itu. Apakah ini Linux yang spesifik? Sepertinya saya ingat menabrak workstation SunOS di awal 90-an dengan membunuh init karena kesalahan. Atau tidak. Saya jauh lebih gegabah di masa muda saya.
Bruce Ediger
1
@BruceEdiger, saya juga sepertinya ingat bisa kill -9 initdan menginduksi kepanikan kernel. Kedengarannya seperti itu berubah di beberapa titik.
psusi
2
@BruceEdiger - Saya mencobanya untuk server AIX dan HP-UX. Keduanya mengembalikan pesan kesalahan: kill: 1: 0403-068 Sinyal tidak valid untuk proses ini ATAU kill: 1: Proses yang ditentukan tidak ada. Halaman manual secara khusus menyebutkan bahwa ini akan menghasilkan kesalahan. Saya diberitahu oleh sejumlah orang bahwa ini bisa dilakukan sebelumnya - tetapi tidak ada yang berhasil dalam 10+ tahun terakhir.
DarkHeart
2
@BruceEdiger Tampaknya dari beberapa pencarian bahwa ini adalah pengembangan baru-baru ini (setidaknya dalam hal umur Unix). Sayangnya saya tidak hidup di awal 90-an, jadi ketika itu terjadi di luar jangkauan pengetahuan saya. Akan menarik untuk mencari tahu, karena tampaknya hampir semua Unices modern telah berubah ke default untuk perilaku ini.
Chris Down