Unix'te kill -9 komutunda neden 9 numara? [kapalı]


101

Bunun konu dışı olduğunu anlıyorum, çevrimiçi hiçbir yerde bulamadım ve belki topluluktaki programlama uzmanlarının bunu bilmesi gerektiğini düşünüyordum.
Genellikle kullanırım

kill -9 pid

işi öldürmek için. Her zaman 9'un kökenini merak etmişimdir. İnternetten baktım ve diyor ki

"9 Yakalanamayan veya göz ardı edilemeyen KILL sinyali anlamına gelir. Başka bir deyişle, işlemin (çalışan bazı uygulamaların) hemen çıkması için sinyal verir" (kaynak: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Ama neden 9? peki ya diğer numaralar? herhangi bir tarihsel önemi var mı yoksa Unix'in mimarisi nedeniyle mi?


6
Sanırım bu soru daha çok superuser.com'a ait
Rafał Rawicki

Yanıtlar:


91

Diğer sinyallerin listesi için Unix sinyalleriyle ilgili wikipedia makalesine bakın . SIGKILL 9 numarayı aldı.

Numaralar gibi hatırlatıcıları da kullanabilirsiniz:

kill -SIGKILL pid

6
Gün içinde (yani 4.xBSD'yi kastediyorum), anımsatıcıları kabuk komutuyla kullanamazdınız, bu nedenle 9 sayısı çok sayıda eski tozlu güverte komut dosyalarına yazılmıştır.
zwol


52

Sanırım burada daha iyi bir cevap basitçe şudur:

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    

9'un "önemi" konusuna gelince ... Muhtemelen hiçbiri olmadığını söyleyebilirim. Linux Programlama Arayüzüne Göre (p 388) :

Her sinyal, sırayla 1'den başlayarak benzersiz (küçük) bir tam sayı olarak tanımlanır. Bu tamsayılar, SIGxxxx biçiminde sembolik adlarla tanımlanır. Yana her sinyali için kullanılan gerçek sayılar uygulamaları arasında farklılık , her zaman programlarda kullanılan bu sembolik isimler olduğunu.


32

Öncelikle Unix benzeri sistemlerde Sinyallerin ne olduğunu bilmeniz gerekir (Sadece birkaç dakika sürecektir).

Sinyaller , önemli bir olayın meydana geldiğini belirtmek için (çalışan) bir programa gönderilen yazılım kesintileridir.

Olaylar, kullanıcı isteklerinden yasadışı bellek erişim hatalarına kadar değişebilir. Kesme sinyali gibi bazı sinyaller, bir kullanıcının programdan normal kontrol akışında olmayan bir şey yapmasını istediğini gösterir.

Kullanabileceğimiz birkaç Sinyal türü vardır - tüm kullanılabilir / olası Sinyallerin tam listesini almak için " $ kill -l " komutunu kullanın: görüntü açıklamasını buraya girin

Yukarıdaki çıktıda, her Sinyalin kendisiyle ilişkili bir ' sinyal numarası ' (örneğin 1, 2, 3) ve bir ' sinyal adı ' (örn. SIGUP, SIGINT, SIGQUIT) olduğu açıkça görülmektedir. Her Signal'in ne yaptığına dair ayrıntılı bir bakış için bu bağlantıyı ziyaret edin .

Son olarak, " Kill -9 komutunda neden 9 numara" sorusuna gelirsek :

Bir programa veya komut dosyasına sinyal göndermenin birkaç yöntemi vardır. Sinyal göndermek için yaygın olarak kullanılan yöntemlerden biri, kill komutunu kullanmaktır - temel sözdizimi şudur:

$ kill -signal pid

Burada sinyal, sinyalin numarası veya adıdır , ardından sinyalin gönderileceği işlem kimliği (pid) gelir.

Örneğin - -SIGKILL (veya -9 ) sinyali, işlemi anında sonlandırır .

$ kill -SIGKILL 1001

ve

$ kill -9 1001

her iki komut da aynı şeydir, yani yukarıda "sinyal adı" nı kullandık ve daha sonra "sinyal numarası" nı kullandık.

Karar : Kill komutuyla 'sinyal adı' veya 'sinyal numarası' kullanılıp kullanılmayacağına dair açık bir seçim vardır .


19

Beatles'ın "Revoulution 9" a bir gönderme. Bir araya getirilmiş ses klipleri ve bulunan seslerden oluşan bir koleksiyon, bu kayıt John Lennon'un "Numara 9, Numara 9 ..." u defalarca tekrarlamasını içeriyor. Dahası, bu şarkı 1969'da geriye doğru çalındığında John'un göründüğü keşfedildiğinde daha da dikkat çekti "Beni aç, ölü adam ..." demek için

Bu nedenle dokuzuncu sinyal, öldürme sinyallerinin en ölümcül olanıydı.


17
Bunu kıçından mı çıkarıyorsun yoksa gerçek olma ihtimali var mı bilemiyorum.
Jonathon Reinhart

Bu konunun sonu gerçekten epik, özellikle benimkinden önceki iki yorum. Ayrıca öldürme ve hangi sıranın kullanılacağıyla ilgili bu makaleye de rastladım: pthree.org/2012/08/14/ Proper
use-

Bunun doğru olmasını çok istiyorum ... :)
nafas

'9 numara' diyen kişi Lennon değil. Hikayenin geri kalanında da bir o kadar gerçek olduğundan şüpheleniyorum (yani hiçbiri) ama kim bilir :)
Stephen Kennedy,

8

Wikipedia'da görebileceğiniz çok uzun bir Unix sinyal listesi var . Biraz kafa karıştırıcı bir şekilde, killbir sürece herhangi bir sinyal göndermek için kullanabilirsiniz . Örneğin, kill -SIGSTOP 1234512345 işlemini yürütmeyi durdurmaya zorlarken kill -SIGCONT 12345, devam etmesini söyler. Bir miktar daha az şifreli versiyon kill -9olduğunu kill -SIGKILL.


2
Sinyal gönderen temel sistem çağrısı da denir kill. Muhtemelen, orijinal sinyal kümelerinin çoğu için (1'den 15'e kadar sayılar) varsayılan davranış, işlemi sonlandırmak olduğu için.
zwol

4

9 numaranın bir önemi olduğunu sanmıyorum. Ayrıca, yaygın inanışa rağmen, killsadece süreçleri öldürmek için değil, aynı zamanda bir sürece sinyal göndermek için de kullanılıyor. Gerçekten merak ediyorsanız buradan ve buradan okuyabilirsiniz .


3

neden öldürür -9: Sinyaller listesindeki 9 rakamı, "bir kedinin 9 canını öldürmek" için SIGKILL olarak seçildi.


3

SIGKILLSüreci öldürmek için kullanın. SIGKILLgöz ardı edilemez veya ele alınamaz. Linux'ta, Verme Yolları SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>

1

Kabuğunuza kill -l komutunu yazın

9. numarada [ 9) SIGKILL ] göreceksiniz , böylece kişi kill -9 veya kill -SIGKILL'i kullanabilir.

SIGKILL kesinlikle öldürme sinyalidir, yeri değiştirilemez, görmezden gelinemez veya ele alınamaz. Her zaman, süreci sonlandırmak olan varsayılan davranışı ile çalışır.


1

-9Signal_number ve öldürme mesajı gönderileceği KILL (non-catchable, ihmal edilemez) tip olması gerektiğini belirtir.

kill -9 pid

Aşağıdaki ile aynıdır.

kill -SIGKILL pid

Bir sinyal_numarası belirtmeden varsayılan değer -15'tir ve bu TERM'dir (yazılım sonlandırma sinyali). Yazmak kill <pid>ile aynıdır kill -15 <pid>.


0

Her ikisi de kill -sigkill processID, kill -9 processID ile aynıdır. Temelde sürecin zorla sonlandırılması içindir.


0

"% 1'i öldür" gibi öldürülemeyen bazı işlemler var. bu işlemi sonlandırmamız gerekirse, bu işlemi öldürmek için kill -9 olan özel bir komut kullanılır. Örneğin, vim'i açın ve ctrl + z kullanarak işleri gördükten sonra durdurun ve kill işlemini uyguladıktan sonra bu işlem sonlandırılmaz, bu yüzden burada sonlandırmak için kill -9 komutunu kullanıyoruz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.