kill命令中-9选项的用途是什么?

两者之间有区别吗?

kill -9 212121 

 kill 212121 

用于kill的Ubuntu手册页解释了-9开关的目的(公认的是以相当不稳定的方式):

 Name Num Action Description KILL 9 exit cannot be blocked 

这是另一个手册页所说的内容。

命令kill将指定的信号发送到指定的进程或进程组。 如果未指定信号,则发送TERM信号。 TERM信号将杀死不捕获此信号的进程。 对于其他过程,可能需要使用KILL9 )信号,因为此信号无法捕获。


因此,使用-9开关可确保有效地终止进程。 即使冻结或无响应的过程可能不响应简单的TERM信号,它也会在发送KILL信号时死亡。

kill命令将定义的信号发送给具有给定标识(PID)的进程:

 kill -  

当然,我们只能杀死我们拥有的进程,而root可以杀死所有进程。 有关计算信号的精彩摘要,请参阅Wikipedia 。

可以发送的信号可以发送在联机帮助页中 。 信号可以用名字或数字表示。 如果没有给出信号,则默认信号为15。 TERM

因此,以下所有三个命令都相同:

 kill -9 1234 kill -KILL 1234 kill -SIGKILL 1234 

SIGTERMSIGKILL之间的区别在于应用程序可能对信号起作用的方式:

  • TERM :应用程序将能够终止,即正确运行关闭例程。
  • KILL :应用程序被立即停止并终止(这可能导致数据丢失或提高apport以报告某些情况下的假定崩溃)。

请注意,以下所有内容都是同义词:

 kill -9 1234 kill -KILL 1234 kill -SIGKILL 1234 

值得指出的是,在信号处理领域, SIGKILL是少数由操作系统而非程序处理的独特产品之一。 当你运行kill -9 ,你并没有告诉应用程序自行终止,而是告诉操作系统停止运行程序,无论程序在做什么。

发送SIGKILL后,程序将立即停止。 如果代表程序正在运行任何内核调用(例如文件IO),那么这些调用可能会继续,也可能不会继续,直到完成,具体取决于调用,但程序本身将不再运行。 请注意,在调试器下运行的跟踪任务或任务在这里可能会有不同的行为。

另一个无法阻止的信号是SIGSTOP ,它具有类似的效果,但会冻结程序; 您可以稍后发送SIGCONT以恢复它。 此行为完全由操作系统控制,并且程序未获得任何事先通知。

所有其他信号都发送到程序; 它可以选择处理它们,或者如果它忽略了信号,则遵循默认行为。

以下是您可能发现自己发送到流程的一些有用信号:

  • 大声挂断
    告诉程序用户断开连接(例如SSH会话或终端窗口已关闭)。
    通常会正常关闭程序。
  • SIGINT中断
    CTRL + C时发送
    通常意味着“停止你正在做的事情” – 可能会也可能不会杀死该计划
  • SIGTERM终止
    killkillall发送的默认值。
    通常终止程序…有时在程序完成它正在做的任何事情之后。
  • SIGSTOP停止
    CTRL + Z时发送
    暂停上面讨论的程序
  • SIGPIPE管道关闭
    告诉程序管道已关闭。 通常终止程序。
    例如cat /etc/passwd | head -n1 cat /etc/passwd | head -n1将在打印第一行后将SIGPIPE发送到cat进程,导致cat在完成整个文件之前终止。

虽然所有这些信号都在他们自己的设置中“自然地”发生,但您可以使用该信号伪造条件以实现所需的结果。

例如,如果要终止某人的SSH会话,您可以简单地终止该进程,但这样做会阻止它更新其HISTORY文件,这可能因安全原因而非常重要。 但是如果你发送它SIGHUP ,那么该过程将假定连接已经死亡并将执行其标准清理。

kill -9含义:进程将被内核杀死; 这个信号不容忽视。 9表示不可捕获或可忽略的KILL信号

用途: SIGKILL singal

杀戮意义:没有任何信号的kill命令传递信号15,它以正常方式终止进程。

用途: SIGTERM信号,可由程序员处理