为什么unix中kill -9命令中的数字9?

时间:2012-03-30 23:24:28

标签: unix command history kill

我理解这不是主题,我无法在网上找到任何地方,我想也许社区中的编程大师可能知道这一点。
我通常使用

kill -9 pid

杀死这份工作。我总是想知道9的起源。我在网上查了一下,然后就说了

“9表示不可捕获或可忽略的KILL信号。换句话说,它会指示进程(某些正在运行的应用程序)立即退出”(来源:http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety

但是,为什么9?那其他数字怎么样?是否有任何历史意义或因为Unix的架构?

13 个答案:

答案 0 :(得分:80)

有关其他信号的列表,请参阅the wikipedia article on Unix signals。 SIGKILL恰好得到了数字9。

您也可以使用助记符作为数字:

kill -SIGKILL pid

答案 1 :(得分:71)

他们首先提出了8个其他信号。

答案 2 :(得分:46)

我认为这里更好的答案就是:

mike@sleepycat:~☺  kill -l
 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    

关于9的“意义”......我想说可能没有。根据{{​​3}}:

  

每个信号都被定义为一个唯一的(小)整数   顺序来自1.这些整数在中定义   SIGxxxx形式的符号名称。由于实际使用的数字   每个信号在不同的实现中都有所不同,正是这些符号名称   总是在程序中使用。

答案 3 :(得分:29)

首先,你需要知道类Unix系统中的 Signals 是什么(只需几分钟)。

  

信号,是发送到(正在运行)程序的软件中断,以指示发生了重要事件。

     
    

事件可能因用户请求到非法内存访问而异     错误。某些信号,例如中断信号,表示a     用户已要求程序执行不常见的操作     控制流程。

  

我们可以使用几种类型的信号 - 使用“ $ kill -l <​​/ strong>”命令获取所有可用/可能信号的完整列表: enter image description here

在上面的输出中,它清晰可见,每个信号都有一个'信号编号'(例如1,2,3)和一个'信号名称'(例如SIGUP,SIGINT,SIGQUIT)与之相关。有关每个信号的详细信息,请访问此link

最后,提出问题“为什么 kill -9 命令中的数字9”:

有几种向程序或脚本传递信号的方法。发送信号的常用方法之一是使用 kill 命令 - 基本语法是:

$ kill -signal pid

如果信号是信号的数字名称,则后面是信号将被发送到的进程ID(pid)。

例如 - -SIGKILL (或 -9 ),信号会立即终止该过程。

$ kill -SIGKILL 1001

$ kill -9 1001

这两个命令是同一个命令,即上面我们使用了'信号名',后来我们使用了'信号号'。

判决:人们可以选择使用“信号名称”或“信号编号”与 kill 命令。

答案 4 :(得分:18)

这是甲壳虫乐队对“Revoulution 9”的提及。这首录音的特色是约翰·列侬一遍又一遍地重复着“9号,9号......”。此外,这首歌在1969年引起了更多关注,当时人们发现这首歌在向后播放时,John似乎要说“打开我,死人......”

因此,第九个信号注定是最致命的杀戮信号。

答案 5 :(得分:7)

有很长的Unix信号列表,您可以查看on Wikipedia。有点令人困惑的是,您实际上可以使用kill向进程发送任何信号。例如,kill -SIGSTOP 12345强制进程12345暂停执行,而kill -SIGCONT 12345则强制它继续执行。 kill -9稍微不那么神秘的版本是kill -SIGKILL

答案 6 :(得分:4)

我认为第9号没有任何意义。此外,尽管普遍认为,kill不仅用于杀死进程,还用于向进程发送信号。 如果您真的很好奇,可以阅读herehere

答案 7 :(得分:1)

SIGKILL用来杀死进程。 SIGKILL不能被忽略或处理。在Linux中,如何提供SIGKILL

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>

答案 8 :(得分:1)

为什么要杀掉-9: 信号列表中的数字9被选为SIGKILL,以“杀死一只猫的9个生命”。

答案 9 :(得分:0)

两者都与kill -sigkill processID,kill -9 processID相同。 它主要用于强制终止该过程。

答案 10 :(得分:0)

在shell上键入kill -l命令

你会发现在第9个数字[ 9] SIGKILL ],所以可以使用 杀死-9或杀死-SIGKILL

SIGKILL肯定是杀死信号,它不能被取消,忽略或处理。 它始终使用其默认行为,即终止进程。

答案 11 :(得分:0)

有一些过程不能像这样杀死&#34;杀死%1&#34; 。如果我们必须终止该进程,那么使用特殊命令来杀死kill -9这个进程。 例如 打开vim并停止,如果使用ctrl + z然后查看作业,并且在应用kill进程之后,此进程将不会终止,所以这里我们使用kill -9命令进行终止。

答案 12 :(得分:0)

-9是signal_number,并指定发送的kill消息应该是KILL(不可捕获,不可忽略)类型。

kill -9 pid

与以下相同。

kill -SIGKILL pid

如果不指定signal_number,则默认值为-15,即TERM(软件终止信号)。键入kill <pid>kill -15 <pid>相同。