Trang Bash Man: giết <pid> vs kill -9 <pid>


25

Trang người đàn ông của tôi không ghi nhận sự khác biệt giữa

kill <pid>

kill -9 <pid>

Vì những điều này làm những điều khác nhau, tại sao -9 không được ghi lại trong killtrang này? Tôi nghĩ có lẽ đó là một thứ cụ thể về vỏ nên tôi cũng đã xem trang bash man nhưng không gặp may.

Câu hỏi thưởng: -9 làm gì?

Câu trả lời:


40

killchỉ cần gửi một tín hiệu cho quá trình nhất định. Nó -9cho nó biết tín hiệu nào để gửi.

Các số khác nhau tương ứng với các tín hiệu phổ biến khác nhau. SIGINT, ví dụ, là 2, vì vậy để gửi một quá trình SIGINTtín hiệu ra lệnh

$ kill -2 <pid>

Trang chủ ở đây chỉ định:

Tín hiệu mặc định cho kill là HẠN.

Trang này cũng cung cấp một bảng các tín hiệu bạn có thể gửi. Theo bảng TERMnày 15, vì vậy, tất cả đều tương đương:

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

Thông báo 9 là KILLtín hiệu.

   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
Tín hiệu mặc định ( kill <pid>) là HẠN.
heavyyd

9
Các con số thường, nhưng không phải lúc nào cũng giống nhau trên các hệ thống dựa trên Unix khác nhau. Thực hành tốt hơn là sử dụng tên tín hiệu. Đó là, thay vì giết -9, hãy sử dụng kill -KILL.
mpez0

7
Tôi sẽ thêm rằng các tín hiệu KILLSTOPđược gọi là tín hiệu không thể bắt được. Điều đó có nghĩa là khi TERMtín hiệu được gửi đến một quá trình, nó có thể bắt được nó và thực hiện các hoạt động "tắt máy" khác nhau mà nó cần phải thực hiện. Các KILLtín hiệu dừng quá trình này ngay lập tức.
Neo

5
Trước tiên, tốt nhất là sử dụng tín hiệu mặc định và chỉ sử dụng -9 nếu mặc định không hoạt động. Lý do cho điều này là -9 không thể bị bắt vì vậy chương trình không có cơ hội thực hiện bất kỳ việc dọn dẹp nào. Ngoài ra, bạn tìm thấy tài liệu cho các tín hiệu trên hệ thống của mình trongman 7 signal
Tạm dừng cho đến khi có thông báo mới.

7

Tín hiệu mặc định là TERM cho phép chương trình bị giết để bắt nó và thực hiện một số dọn dẹp trước khi thoát. Một chương trình cũng có thể bỏ qua nó, nếu nó được viết theo cách đó.

Chỉ định -9 hoặc KILL vì tín hiệu không cho phép chương trình bắt được nó, thực hiện bất kỳ việc dọn dẹp hoặc bỏ qua nó. Nó chỉ nên được sử dụng như là một phương sách cuối cùng.

Để xem danh sách các số và tên tín hiệu trong Bash, sử dụng kill -l(ký tự ell).


4

Tôi đang sử dụng Ubuntu Linux.

Lệnh Kill về cơ bản gửi tín hiệu để xử lý để kết thúc nó. Để đơn giản hóa các kỳ vọng hành vi phức tạp của lệnh kill máy tính hàng ngày có nhiều tùy chọn khác nhau cùng với nó.

Như đã giải thích ở trên với tất cả các tùy chọn số kill tương ứng với định nghĩa của nó.

Tôi muốn thêm vài dòng cho nó.

 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    

Như bạn thấy ở trên, đây là tất cả các tùy chọn tiêu diệt bạn sẽ nhận được nếu chạy Ubuntu Linux.

Nhưng một số tín hiệu tiêu diệt nhất định là phổ biến trên tất cả các hương vị * NIX.

kill -9 là tùy chọn SIGKILL và kernel không thể bỏ qua tín hiệu này, có nghĩa là nó đã tôn trọng tùy chọn -9 hoặc SIGKILL này và thoát quy trình ngay lập tức. Hãy nhớ rằng quá trình này không thể được xử lý bởi các chương trình ứng dụng.

giết -15 mặt khác sẽ gửi tín hiệu SIGTERM, có nghĩa là nó sẽ chờ quá trình tắt máy trước khi thoát. Đây là tín hiệu mặc định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.