Bash手册页:kill <pid> vs kill -9 <pid>


25

我的手册页没有记录下两者之间的区别

kill <pid>

kill -9 <pid>

由于这些功能不同,为什么手册kill页中没有记录-9 ? 我以为这可能是壳特有的事情,所以我也查看了bash手册页,但没有运气。

额外的问题:-9做什么?

Answers:


40

kill只是向给定进程发送信号。该-9告诉它哪些信号发送。

不同的数字对应于不同的公共信号。SIGINT,例如为2,因此要发送一个进程SIGINT信号发出命令

$ kill -2 <pid>

此处联机帮助页指定:

默认的终止信号是TERM。

该手册页还提供了可以发送的信号表。根据此表,TERMis 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。
重载2010年

9
在不同的基于Unix的系统上,这些数字通常但并非总是相同。最好使用信号名称。也就是说,使用kill -KILL代替kill -9。
mpez0'2

7
我还要补充说KILLSTOP信号是所谓的不可捕获信号。这意味着当TERM信号发送到进程时,它能够捕获该信号并执行其需要执行的各种“关闭”操作。该KILL信号立即停止进程。

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信号,这意味着它将等待进程完全关闭后再退出。这是默认信号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.