Apakah '-9' sebuah bendera untuk membunuh perintah?

14

Apa yang -9harus dilakukan

Itu tidak muncul di sintaks:

$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
$
Lazer
sumber
10
-9adalah turunan dari -sigspec, itu setara dengan -s 9atau -n 9atau -s KILLatau -KILL.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

21

-9adalah nomor sinyal (dalam hal ini SIGKILL), jadi kill -9kirim a SIGKILLke proses yang dimaksud.

Sinyal ini menyebabkan proses untuk segera dihentikan (kecuali menunggu dalam fungsi kernel). Sinyal tidak dapat diabaikan atau proses penerimaan tidak dapat melakukan tindakan pembersihan setelah menerima sinyal (yaitu penangan sinyal SIGKILLtidak dipanggil). Lihat juga artikel Wikipedia tentang SIGKILL .

Dari halaman manual dari killperintah saya (Linux):

   The  default  signal  for  kill is TERM. Use -l or -L to list available
   signals.  Particularly useful signals include  HUP,  INT,  KILL,  STOP,
   CONT,  and  0.   Alternate  signals  may be specified in three ways: -9
   -SIGKILL -KILL.

EDIT : kill -l( bashperintah bawaan) mencantumkan nama sinyal dan nilai numerik berikut pada sistem saya:

 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
Andre Holzner
sumber
1
Pada Debian kill -lmencantumkan nilai numerik juga. Apa OS kamu?
Faheem Mitha
menarik, saya menjalankan Ubuntu (yang berbasis Debian sejauh yang saya tahu). Di sisi lain, saya hanya memperhatikan bahwa man killdaftar nilai numerik untuk beberapa sinyal.
Andre Holzner
Nah, killada di procps, yang merupakan versi 1:3.2.8-9di memeras Debian. Dan ya, Ubuntu pada dasarnya adalah Debian. Jadi saya bertanya-tanya mengapa kill -ltidak mengembalikan hal yang sama.
Faheem Mitha
1
ternyata saya menjalankan perintah zshbuiltin kill, bukan /bin/kill(yang sebenarnya mencantumkan nilai numerik seperti yang Anda katakan)
Andre Holzner
5
@FaheemMitha Ada dua alasan mengapa shell membutuhkan killbuilt-in. Ini memungkinkan killperintah untuk menerima nomor atau nama pekerjaan (misalnya kill %1). Dan itu memungkinkan killuntuk digunakan bahkan jika beberapa batas hitungan proses telah tercapai.
Gilles 'SANGAT berhenti menjadi jahat'
0

man signal

Akan menampilkan pemetaan antara nomor sinyal dan nama sinyal.

David Paigen
sumber