SIGKILL不起作用的情况

Man*_*dar 4 linux signals

是否有任何情况下,在linux上运行的应用程序(未阻止信号SIGKILL)在发出SIGKILL信号时不会被杀死?

Mat*_*Mat 10

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

如果信号在系统调用"内部"被阻塞,则进程可能对信号没有响应(等待I/O就是一个例子 - 在没有intr选项的硬件安装的失败的NFS文件系统上等待I/O ).

(另一个案例是僵尸进程,但那时它们并不是真正的进程.)

  • @Mandar,不。您不能“阻止所有信号”。D状态是内核的内部状态(例如,从CD-ROM读取,同步到磁盘等)。 (2认同)

Bas*_*tch 5

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


maz*_*azs 5

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

D : uninterruptible sleep (usually IO)
Run Code Online (Sandbox Code Playgroud)

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

  • SIGKILL 信号仍将处于挂起状态,如果系统以某种方式在该进程上脱离,它将在返回用户空间时自动处理它(退出进程)。 (2认同)