Bash Man Page: kill <pid> vs kill -9 <pid>

25

Halaman manual saya tidak mendokumentasikan perbedaan antara

kill <pid>

dan

kill -9 <pid>

Karena ini melakukan hal yang berbeda mengapa -9 tidak didokumentasikan di halaman killmanual? Saya pikir mungkin itu adalah hal-hal khusus shell jadi saya mencari di halaman bash man juga, tetapi tidak berhasil.

Pertanyaan bonus: apa yang dilakukan -9?

sixtyfootersdude
sumber

Jawaban:

40

killhanya mengirim sinyal ke proses yang diberikan. The -9mengatakan itu yang sinyal untuk mengirim.

Angka yang berbeda sesuai dengan sinyal umum yang berbeda. SIGINT, misalnya, adalah 2, jadi untuk mengirim suatu proses SIGINTsinyal mengeluarkan perintah

$ kill -2 <pid>

Halaman manual di sini menetapkan:

Sinyal default untuk kill adalah TERM.

Halaman manual juga menyediakan tabel sinyal yang dapat Anda kirim. Menurut tabel ini, TERMadalah 15, jadi ini semua sama:

kill <pid>
kill -15 <pid>
kill -TERM <pid>

Pemberitahuan 9 adalah KILLsinyal.

   Name   Number  Action
   -----------------------
   ALRM      14   exit
   HUP        1   exit
   INT        2   exit
   KILL       9   exit  this signal may not be blocked
   PIPE      13   exit
   POLL           exit
   PROF           exit
   TERM      15   exit     [Default]
   USR1           exit
   USR2           exit
   VTALRM         exit
   STKFLT         exit  may not be implemented
   PWR            ignore    may exit on some systems
   WINCH          ignore
   CHLD           ignore
   URG            ignore
   TSTP           stop  may interact with the shell
   TTIN           stop  may interact with the shell
   TTOU           stop  may interact with the shell
   STOP           stop  this signal may not be blocked
   CONT           restart   continue if stopped, otherwise ignore
   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core  may not be implemented
   EMT            core  may not be implemented
   BUS            core  core dump may fail

   XCPU           core  core dump may fail
   XFSZ           core  core dump may fail
Mark Pim
sumber
8
Sinyal default ( kill <pid>) adalah TERM.
heavyd
9
Jumlahnya biasanya, tetapi tidak selalu, sama pada sistem berbasis Unix yang berbeda. Lebih baik berlatih menggunakan nama sinyal. Artinya, alih-alih membunuh -9, gunakan kill -KILL.
mpez0
7
Saya akan menambahkan bahwa sinyal KILLdan STOPapa yang disebut sinyal tidak dapat ditangkap. Itu berarti ketika TERMsinyal dikirim ke suatu proses, ia dapat menangkapnya dan melakukan berbagai operasi "shutdown" yang perlu dilakukan. The KILLsinyal berhenti proses segera.
Neo
5
Yang terbaik adalah menggunakan sinyal default terlebih dahulu dan hanya menggunakan -9 jika default tidak berfungsi. Alasannya adalah -9 tidak dapat ditangkap sehingga program tidak memiliki kesempatan untuk melakukan pembersihan. Juga, Anda menemukan dokumentasi untuk sinyal pada sistem Anda diman 7 signal
Dijeda sampai pemberitahuan lebih lanjut.
7

Sinyal default adalah JANGKA yang memungkinkan program terbunuh untuk menangkapnya dan melakukan pembersihan sebelum keluar. Suatu program dapat mengabaikannya juga, jika ditulis seperti itu.

Menentukan -9 atau KILL sebagai sinyal tidak memungkinkan program untuk menangkapnya, melakukan pembersihan atau mengabaikannya. Seharusnya hanya digunakan sebagai jalan terakhir.

Untuk melihat daftar nomor dan nama sinyal di Bash, gunakan kill -l(huruf ell).

Dijeda sampai pemberitahuan lebih lanjut.
sumber
4

Saya menggunakan Ubuntu Linux.

Perintah Kill pada dasarnya mengirimkan sinyal ke proses untuk mengakhirinya. Untuk menyederhanakan ekspektasi perilaku kompleks dari komputasi sehari-hari, kill command memiliki beragam opsi.

Seperti dijelaskan di atas dengan semua opsi nomor yang sesuai dengan definisinya.

Saya ingin menambahkan beberapa baris.

 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    

Seperti yang Anda lihat di atas, ini semua opsi bunuh yang akan Anda dapatkan jika Anda menjalankan Ubuntu Linux.

Tetapi sinyal bunuh tertentu adalah umum di semua rasa * NIX.

kill -9 adalah opsi SIGKILL dan kernel tidak dapat mengabaikan sinyal ini, yang berarti telah menghormati opsi -9 atau SIGKILL ini dan segera keluar dari proses. Ingat proses ini tidak dapat ditangani oleh program aplikasi.

kill -15 di sisi lain akan mengirim sinyal SIGTERM, artinya akan menunggu proses untuk shutdown sebelum keluar. Ini adalah sinyal standar.

irfan
sumber