Có phải '-9' là một lá cờ để giết lệnh?


14

Không gì -9làm gì?

Nó không hiển thị trong cú pháp:

$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
$

10
-9là một thể hiện của -sigspec, nó tương đương với -s 9hoặc -n 9hoặc -s KILLhoặc -KILL.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


21

-9là số tín hiệu (trong trường hợp này SIGKILL), vì vậy kill -9sẽ gửi a SIGKILLđến quy trình được đề cập.

Tín hiệu này làm cho quá trình chấm dứt ngay lập tức (trừ khi nó chờ trong hàm kernel). Tín hiệu không thể bị bỏ qua cũng như quá trình nhận có thể thực hiện bất kỳ hành động dọn sạch nào sau khi nhận tín hiệu (nghĩa là bộ xử lý tín hiệu SIGKILLkhông được gọi). Xem thêm bài viết Wikipedia về SIGKILL .

Từ trang man của killlệnh của tôi (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( bashlệnh tích hợp) liệt kê các tên tín hiệu và giá trị số sau đây trên hệ thống của tôi:

 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

1
Trên Debian cũng kill -lliệt kê các giá trị số. HĐH của bạn là gì?
Faheem Mitha

Thật thú vị, tôi đang chạy Ubuntu (dựa trên Debian theo như tôi biết). Mặt khác, tôi chỉ nhận thấy rằng man killliệt kê các giá trị số cho một số tín hiệu.
Andre Holzner

Vâng, killlà trong procps, đó là phiên bản 1:3.2.8-9trong Debian bóp. Và vâng, Ubuntu về cơ bản là Debian. Vì vậy, tôi tự hỏi tại sao kill -lkhông trả lại điều tương tự.
Faheem Mitha

1
Hóa ra tôi đang chạy lệnh zshdựng sẵn kill, không phải /bin/kill(mà thực sự liệt kê các giá trị số như bạn nói)
Andre Holzner

5
@FaheemMitha Có hai lý do tại sao shell cần tích killhợp sẵn. Nó cho phép killlệnh chấp nhận số công việc hoặc tên (ví dụ kill %1). Và nó cho phép killđược sử dụng ngay cả khi đã đạt đến một số giới hạn số lượng quá trình.
Gilles 'SO- ngừng trở nên xấu xa'

0

man signal

Sẽ cho bạn thấy ánh xạ giữa số tín hiệu và tên tín hiệu.

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.