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


Answers:


28

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

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

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

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


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


40

所述命令将确定的发送信号与给定的身份(PID)的方法:

kill -<signal> <pid>

当然,我们只能杀死我们拥有的进程,而root可以杀死所有进程。有关计算信号的详细概述,请参见Wikipedia

信号kill可以发送在上市手册页。信号可以用名称或数字表示。如果未给出信号,则默认信号为15。TERM用来。

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

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

SIGTERM和之间的区别SIGKILL是应用程序对信号的作用方式:

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

16

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

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

值得指出的是,在信号处理领域,SIGKILL是少数几个由操作系统而非程序处理的独特代码之一。运行时kill -9,您不是在告诉应用程序终止自身,而是在告诉OS停止运行该程序,无论该程序在做什么。

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

另一个不能阻止的信号是SIGSTOP,它具有类似的效果,但是会冻结程序;您可以稍后发送SIGCONT以继续。此行为完全由OS控制,并且程序不会获得任何事先通知。

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

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

  • SIGHUP - hangup
    告诉程序用户已断开连接(例如SSH会话或终端窗口已关闭)。
    通常会正常关闭程序。
  • SIGINT - 中断
    ,当你点击发送CTRL+ C
    通常是指“停止你正在做什么” -可能会或可能不会杀死程序
  • SIGTERM - 终止
    通过发送默认killkillall
    通常会终止程序...有时在程序完成所有操作之后。
  • SIGSTOP - 停止
    ,当你点击发送CTRL+ Z
    暂停程序,上述讨论
  • SIGPIPE - 管封闭
    告诉该管道已关闭该程序。通常会终止程序。
    例如cat /etc/passwd | head -n1,在cat打印第一行之后将SIGPIPE发送到该进程,从而导致cat在完成整个文件之前终止。

尽管所有这些信号都是在其自身设置中“自然”发生的,但是您可以使用该信号来伪造条件以获得所需的结果。

例如,如果您想终止某人的SSH会话,则可以简单地终止该过程,但是这样做可以防止其更新其HISTORY文件,出于安全原因,这可能很重要。但是,如果您将其发送给SIGHUP,则该过程将假定连接已终止并执行其标准清除。


Ctrl + \ sends SIGQUIT,默认操作是转储核心并终止。如果程序做错了什么,您需要立即将其停止,并希望以后能够进行调试,则可以使用此方法。
西蒙·里希特

@SimonRichter哦,您是对的。固定。
tylerl 2012年

6

kill -9含义:该进程将被内核杀死;此信号不可忽略。9表示无法捕获或忽略的KILL信号

用途:SIGKILL

Kill含义:不带任何信号的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.