为什么在unix中的kill -9命令中使用数字9?[关闭]


101

我知道这不是主题,我无法在网上找到任何地方,而且我在想社区中的编程专家可能知道这一点。
我通常使用

kill -9 pid

杀死工作。我一直想知道9的起源。我在网上查了一下,上面写着

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

但是,为什么是9?那其他数字呢?有什么历史意义还是因为Unix的体系结构?


6
我认为,这个问题更是属于superuser.com
拉法尔Rawicki

Answers:




50

我认为一个更好的答案是:

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的“重要性”,我想可能没有。根据Linux编程接口(p 388)

从1开始,每个信号都被定义为唯一的(小)整数。这些整数以SIGxxxx形式的符号名定义。由于每个信号所使用的实际数字在实现中会有所不同,因此程序中始终使用这些符号名称。


32

首先,您需要了解在类Unix系统中什么是Signals(只需几分钟)。

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

事件可能会有所不同,从用户请求到非法的内存访问错误。某些信号(例如中断信号)表明用户已要求程序执行常规控制流程之外的操作。

我们可以使用几种信号类型-使用“ $ kill -l ”命令来获取所有可用/可能信号的完整列表: 在此处输入图片说明

在上面的输出中,每个信号都有一个与其关联的“ 信号编号 ”(例如1、2、3)和一个“ 信号名称 ”(例如SIGUP,SIGINT,SIGQUIT),这是显而易见的。要详细了解每个Signal的功能,请访问此链接

最后,出现问题“为什么在kill -9命令中使用数字9 ”:

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

$ kill -signal pid

其中signal是信号的编号名称,后跟信号将发送到的进程ID(pid)。

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

$ kill -SIGKILL 1001

$ kill -9 1001

这两个命令是同一件事,也就是说,上面我们使用了“信号名称”,后来我们使用了“信号编号”。

结论:对于kill命令使用“信号名称”还是“信号编号”,有一个开放的选择。


19

它是甲壳虫乐队对“革命9”的引用。这张唱片汇集了一些声音片段并发现了声音,这张唱片的特点是约翰·列侬一遍又一遍地重复“ 9号,9号...”。此外,这首歌在1969年引起人们的更多关注,当时发现当向后播放时,约翰似乎说“打开我,死人...”

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


17
真的无法确定您是要把它从屁股里拔出来,还是有可能是真的。
Jonathon Reinhart

该主题的结尾确实是史诗般的,尤其是我面前的两个评论。我还偶然发现了有关kill和使用哪个序列的文章:pthree.org/2012/08/14/appropriate-use-of-kill-9-pid
Gull_Code 2014年

我非常希望这是真的... :)
nafas

说“ 9号”的人不是列侬。我怀疑故事的其余部分也有同样的道理(即无),但谁知道:)
斯蒂芬·肯尼迪

8

Unix信号列表很长,您可以在Wikipedia上查看。有点令人困惑的是,您实际上可以kill用来向进程发送任何信号。例如,kill -SIGSTOP 12345强制进程12345暂停其执行,同时kill -SIGCONT 12345告诉它恢复执行。的略少神秘版本kill -9kill -SIGKILL


2
发送信号的基础系统调用也称为kill。可能是因为大多数原始信号集(数字1至15)的默认行为是终止该过程。
zwol 2012年


3

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


3

SIGKILL用于杀死进程。SIGKILL不容忽视或处理。在Linux中,给出方法SIGKILL

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

1

在您的外壳上键入kill -l命令

您会发现第9个数字[ 9)SIGKILL ],因此可以使用kill -9或kill -SIGKILL

SIGKILL确定杀死信号,它不能被处置,忽略或处理。它始终以其默认行为工作,即终止进程。


1

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

kill -9 pid

如下所示。

kill -SIGKILL pid

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


0

两者都与kill -sigkill processID相同,kill -9 processID。它基本上是用于强制终止过程。


0

有些进程无法杀死,例如“ kill%1”。如果我们必须终止该进程,则使用特殊命令杀死该进程,即kill -9。例如,打开vim并停止,如果使用ctrl + z然后查看作业,则在应用kill进程之后,该进程将不会终止,因此在这里我们使用kill -9命令终止。

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.