【问题标题】:Is there some cases in which SIGKILL will not work?在某些情况下 SIGKILL 不起作用?
【发布时间】:2011-12-22 07:02:55
【问题描述】:

在 Linux 上运行的应用程序在没有阻止信号 SIGKILL 时是否会在触发 SIGKILL 信号时不会被杀死?

【问题讨论】:

标签: linux signals sigkill


【解决方案1】:

SIGKILL 不能被阻止或忽略(SIGSTOP 也不能)。

如果进程在系统调用“内部”被阻塞(等待 I/O 就是一个例子 - 在没有 @987654324 的情况下硬挂载的失败 NFS 文件系统上等待 I/O以@选项为例)。

(另一种情况是僵尸进程,但此时它们并不是真正的进程。)

【讨论】:

  • 这是否意味着当用户应用程序进行系统调用时,它会阻塞所有信号,直到该系统调用返回?
  • 它不是“阻塞”,它处于“不间断睡眠(D)”状态。见stackoverflow.com/questions/767551/…
  • @Mandar,没有。您不能“阻止所有信号”。 D 状态是内核内部的东西(例如,从 CD-ROM 读取、同步到磁盘等)
  • 您所描述的称为“磁盘睡眠”,在进程状态中用“D”表示。
【解决方案2】:

是的,当进程在内核空间中被阻塞时,例如在被阻止的 NFS 文件系统或没有响应的设备上读取。

【讨论】:

    【解决方案3】:

    检查ps a(或者您也可以使用其他标志)进程状态。 如果一个进程状态是

    D : uninterruptible sleep (usually IO)
    

    那么你不能杀死那个进程。
    正如其他人所提到的,正如它所定义的,这通常是由 I/O 卡住引起的,例如等待对断开连接的 NFS 文件系统执行 I/O 的进程。

    【讨论】:

    • SIGKILL 信号仍将处于未决状态,如果系统以某种方式脱离该进程,它将在返回用户空间时自动处理(退出进程)。
    猜你喜欢
    • 2018-11-28
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2017-06-29
    • 1970-01-01
    • 2019-07-11
    相关资源
    最近更新 更多