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


25

หน้าคนของฉันไม่ได้บันทึกความแตกต่างระหว่าง

kill <pid>

และ

kill -9 <pid>

เนื่องจากสิ่งเหล่านี้ทำสิ่งที่แตกต่างกันเพราะเหตุใด -9 จึงไม่มีการจัดทำเป็นเอกสารในkillmanpage? ฉันคิดว่าบางทีมันเป็นสิ่งที่เฉพาะเจาะจงของหอยดังนั้นฉันจึงดูในหน้าคนทุบตีด้วย แต่ไม่มีโชค

คำถามโบนัส: -9 ทำอะไรได้บ้าง

คำตอบ:


40

killเพียงแค่ส่งสัญญาณไปยังกระบวนการที่กำหนด The -9จะบอกว่าจะส่งสัญญาณใด

ตัวเลขต่างกันสอดคล้องกับสัญญาณทั่วไปที่แตกต่างกัน SIGINTตัวอย่างเช่นคือ 2 ดังนั้นในการส่งกระบวนการSIGINTสัญญาณออกคำสั่ง

$ kill -2 <pid>

manpage นี่ระบุ:

สัญญาณเริ่มต้นสำหรับการฆ่าคือ TERM

manpage ยังมีตารางสัญญาณที่คุณสามารถส่งได้ ตามตารางนี้TERMคือ15ดังนั้นทั้งหมดนี้เทียบเท่า:

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

ประกาศ 9 คือKILLสัญญาณ

   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

8
สัญญาณเริ่มต้น ( kill <pid>) คือ TERM
หนัก

9
โดยปกติแล้วตัวเลขนั้นมักจะเหมือนกันในระบบที่ใช้ Unix ที่แตกต่างกัน ควรใช้ชื่อสัญญาณ นั่นคือแทนที่จะฆ่า -9 ใช้ kill -KILL
mpez0

7
ฉันจะเพิ่มว่าKILLและSTOPสัญญาณเป็นสัญญาณที่ไม่สามารถตรวจจับ นั่นหมายความว่าเมื่อTERMสัญญาณถูกส่งไปยังกระบวนการมันสามารถจับสัญญาณและดำเนินการ "ปิด" ต่าง ๆ ที่จำเป็นต้องทำ KILLสัญญาณหยุดกระบวนการทันที
Neo

5
เป็นการดีที่สุดที่จะใช้สัญญาณเริ่มต้นก่อนและใช้เพียง -9 ถ้าค่าเริ่มต้นไม่ทำงาน สาเหตุของเรื่องนี้คือไม่สามารถจับ -9 ได้ดังนั้นโปรแกรมจึงไม่มีโอกาสล้างข้อมูลใด ๆ นอกจากนี้คุณจะพบเอกสารสำหรับสัญญาณในระบบของคุณในman 7 signal
หยุดชั่วคราวจนกว่าจะมีประกาศเพิ่มเติม

7

สัญญาณเริ่มต้นคือ TERM ซึ่งอนุญาตให้โปรแกรมถูกฆ่าเพื่อจับและทำการล้างข้อมูลก่อนออก โปรแกรมสามารถเพิกเฉยได้เช่นกันหากเขียนด้วยวิธีนั้น

การระบุ -9 หรือ KILL เป็นสัญญาณไม่อนุญาตให้โปรแกรมจับโปรแกรมทำการล้างข้อมูลหรือเพิกเฉย มันควรจะใช้เป็นทางเลือกสุดท้าย

หากต้องการดูรายการหมายเลขและชื่อสัญญาณใน Bash ให้ใช้kill -l(ตัวอักษร ell)


4

ฉันใช้ Ubuntu Linux

คำสั่ง Kill โดยทั่วไปจะส่งสัญญาณไปยังกระบวนการเพื่อสิ้นสุด เพื่อลดความซับซ้อนของความคาดหวังเชิงพฤติกรรมที่ซับซ้อนของการประมวลผลคำสั่ง kill ทุกวันมีตัวเลือกมากมายพร้อมด้วย

ตามที่อธิบายไว้ข้างต้นพร้อมตัวเลือกหมายเลขฆ่าทั้งหมดที่สอดคล้องกับคำจำกัดความ

ฉันต้องการเพิ่มสองสามบรรทัด

 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    

ดังที่คุณเห็นด้านบนเหล่านี้คือตัวเลือกการฆ่าทั้งหมดที่คุณจะได้รับหากคุณใช้ Ubuntu Linux

แต่สัญญาณการฆ่าบางอย่างนั้นเหมือนกันในทุกรสชาติ * NIX

kill -9 เป็นตัวเลือก SIGKILL และเคอร์เนลไม่สามารถเพิกเฉยต่อสัญญาณนี้ได้ซึ่งหมายความว่ามีเกียรติ -9 หรือตัวเลือก SIGKILL และออกจากกระบวนการทันที โปรดจำไว้ว่ากระบวนการนี้ไม่สามารถจัดการได้โดยโปรแกรมแอปพลิเคชัน

kill -15 จะส่งสัญญาณ SIGTERM ซึ่งหมายความว่ามันจะรอกระบวนการที่จะปิดอย่างสมบูรณ์ก่อนที่จะออก นี่คือสัญญาณเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.