Mengapa nomor 9 dalam perintah kill -9 di unix? [Tutup]

101

Saya mengerti ini di luar topik, saya tidak dapat menemukan di mana pun secara online dan saya berpikir mungkin guru pemrograman di komunitas mungkin mengetahui hal ini.
Saya biasanya menggunakan

kill -9 pid

untuk menghentikan pekerjaan itu. Saya selalu bertanya-tanya asal mula 9. Saya mencarinya secara online, dan tertulis

"9 Berarti MEMBUNUH sinyal yang tidak dapat ditangkap atau diabaikan. Dengan kata lain itu akan memberi sinyal proses (beberapa aplikasi yang sedang berjalan) untuk segera keluar" (sumber: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Tapi, kenapa 9? dan bagaimana dengan angka lainnya? apakah ada signifikansi sejarah atau karena arsitektur Unix?

Alby
sumber
6
Saya pikir, pertanyaan ini lebih baik dimiliki oleh superuser.com
Rafał Rawicki

Jawaban:

89

Lihat artikel wikipedia tentang sinyal Unix untuk mengetahui daftar sinyal lainnya. SIGKILL kebetulan mendapatkan nomor 9.

Anda juga bisa menggunakan mnemonik, seperti nomor:

kill -SIGKILL pid
Rafał Rawicki
sumber
6
Kembali pada hari itu (maksud saya 4.xBSD atau lebih) Anda tidak dapat menggunakan mnemonik dengan perintah shell, itulah sebabnya nomor 9 ditulis ke dalam banyak sekali skrip shell berdebu-deck tua.
zwol
72

Ada 8 sinyal lain yang mereka dapatkan pertama kali.

Jonathon Reinhart
sumber
50

Saya pikir jawaban yang lebih baik di sini hanyalah ini:

mike@sleepycat:~☺  kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP  
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

Adapun "signifikansi" dari 9 ... Saya akan mengatakan mungkin tidak ada. Menurut The Linux Programming Interface (p 388) :

Setiap sinyal didefinisikan sebagai bilangan bulat unik (kecil), dimulai secara berurutan dari 1. Bilangan bulat ini ditentukan dengan nama simbolik dalam bentuk SIGxxxx. Karena angka aktual yang digunakan untuk setiap sinyal bervariasi di seluruh implementasi , nama simbolis inilah yang selalu digunakan dalam program.

mikewilliamson.dll
sumber
32

Pertama, Anda perlu tahu apa itu Sinyal dalam sistem mirip Unix (Ini hanya akan memakan waktu beberapa menit).

Sinyal , adalah interupsi perangkat lunak yang dikirim ke program (berjalan) untuk menunjukkan bahwa suatu peristiwa penting telah terjadi.

Peristiwa dapat bervariasi dari permintaan pengguna hingga kesalahan akses memori ilegal. Beberapa sinyal, seperti sinyal interupsi, menunjukkan bahwa pengguna telah meminta program untuk melakukan sesuatu yang tidak berada dalam aliran kontrol yang biasa.

Ada beberapa jenis Sinyal yang dapat kita gunakan - untuk mendapatkan daftar lengkap dari semua Sinyal yang tersedia / mungkin, gunakan perintah " $ kill -l ": masukkan deskripsi gambar di sini

Pada keluaran di atas terlihat jelas, bahwa setiap Sinyal memiliki ' nomor sinyal ' (misalnya 1, 2, 3) dan ' nama sinyal ' (misalnya SIGUP, SIGINT, SIGQUIT) yang terkait dengannya. Untuk pencarian mendetail tentang apa yang masing-masing dan setiap Signal lakukan, kunjungi tautan ini .

Akhirnya, datang ke pertanyaan "Mengapa nomor 9 dalam perintah kill -9 ":

Ada beberapa metode untuk mengirimkan sinyal ke program atau skrip. Salah satu metode yang umum digunakan untuk mengirim sinyal adalah dengan menggunakan perintah kill - sintaks dasarnya adalah:

$ kill -signal pid

Dimana sinyal bisa berupa nomor atau nama sinyal, diikuti dengan proses Id (pid) dimana sinyal akan dikirim.

Misalnya - -SIGKILL (atau -9 ), sinyal membunuh proses dengan segera.

$ kill -SIGKILL 1001

dan

$ kill -9 1001

kedua perintah tersebut adalah satu hal yang sama yaitu di atas kita telah menggunakan 'nama sinyal', dan kemudian kita menggunakan 'nomor sinyal'.

Putusan : Seseorang memiliki pilihan terbuka apakah menggunakan 'nama sinyal' atau 'nomor sinyal' dengan perintah kill .

Nabeel Ahmed
sumber
19

Ini mengacu pada "Revoulution 9" oleh The Beatles. Kumpulan klip suara yang dirangkai dan suara-suara yang ditemukan, rekaman ini menampilkan John Lennon mengulangi berulang kali "Nomor 9, Nomor 9 ..." Lebih lanjut, lagu ini menarik perhatian lebih lanjut pada tahun 1969 ketika ditemukan bahwa ketika diputar mundur, John tampak untuk mengatakan "Hidupkan aku, orang mati ..."

Oleh karena itu, sinyal kesembilan ditakdirkan menjadi sinyal mematikan yang paling mematikan.

Tangga
sumber
17
Benar-benar tidak tahu apakah Anda menarik ini dari pantat Anda, atau apakah ada kemungkinan itu benar.
Jonathon Reinhart
Akhir dari topik itu benar-benar epik, terutama dua komentar sebelum saya. Saya juga menemukan artikel tentang kill dan urutan mana yang harus digunakan: pthree.org/2012/08/14/appropri-use-of-kill-9-pid
Gull_Code
Saya sangat ingin ini menjadi kenyataan ... :)
nafas
Orang yang mengatakan 'nomor 9' bukanlah Lennon. Saya menduga ada banyak kebenaran di sisa cerita (yaitu tidak ada) tetapi siapa yang tahu :)
Stephen Kennedy
8

Ada daftar sinyal Unix yang sangat panjang, yang dapat Anda lihat di Wikipedia . Agak membingungkan, Anda sebenarnya dapat menggunakan killuntuk mengirim sinyal apa pun ke suatu proses. Misalnya, kill -SIGSTOP 12345memaksa proses 12345 untuk menghentikan sementara eksekusinya, sementara kill -SIGCONT 12345memerintahkannya untuk melanjutkan. Versi yang sedikit lebih samar dari kill -9adalah kill -SIGKILL.

Lawrence Velázquez
sumber
2
Panggilan sistem yang mendasari yang mengirimkan sinyal juga disebut kill. Mungkin karena perilaku default untuk sebagian besar rangkaian sinyal asli (nomor 1 hingga 15) adalah menghentikan proses.
zwol
4

Saya tidak berpikir ada arti penting untuk nomor 9. Selain itu, meskipun diyakini umum, killdigunakan tidak hanya untuk mematikan proses tetapi juga mengirim sinyal ke suatu proses. Jika Anda benar-benar penasaran, Anda dapat membaca di sini dan di sini .

Ilia Frenkel
sumber
3

mengapa membunuh -9: angka 9 dalam daftar sinyal telah dipilih sebagai SIGKILL sehubungan dengan "membunuh 9 nyawa kucing".

LaFleche78
sumber
3

SIGKILLgunakan untuk menghentikan proses. SIGKILLtidak bisa diabaikan atau ditangani. Di Linux, Cara memberi SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>
Pembuat kunci00
sumber
1

Ketik perintah kill -l di shell Anda

Anda akan menemukan itu di nomor 9 [ 9) SIGKILL ], jadi seseorang dapat menggunakan kill -9 atau kill -SIGKILL

SIGKILL pasti mematikan sinyal, Ini tidak dapat dipindahkan posisinya, diabaikan atau ditangani. Itu selalu bekerja dengan perilaku defaultnya, yaitu mematikan proses.

Sandeep_black
sumber
1

Itu -9adalah signal_number, dan menentukan bahwa pesan kill yang dikirim harus dari jenis KILL (non-catchable, non-ignorable).

kill -9 pid

Yang sama seperti di bawah ini.

kill -SIGKILL pid

Tanpa menentukan signal_number default -15, yaitu TERM (software termination signal). Mengetik kill <pid>sama dengan kill -15 <pid>.

Harini
sumber
0

Keduanya sama dengan kill -sigkill processID, kill -9 processID. Ini pada dasarnya untuk penghentian paksa proses.

Abhilash TC
sumber
0

ada beberapa proses yang tidak bisa dimatikan seperti ini "kill% 1". jika kita harus menghentikan proses tersebut maka perintah khusus digunakan untuk mematikan proses tersebut yaitu kill -9. misal buka vim dan stop jika dengan menggunakan ctrl + z kemudian lihat pekerjaan dan setelah menerapkan proses kill maka proses ini tidak akan dihentikan jadi disini kita menggunakan perintah kill -9 untuk mengakhiri.

Usman
sumber