还活着,kill -9 / SIGKILL 后还活着

9 process kill

一个 apache2 进程卡在我的服务器上并导致其他服务出现问题。(原问题:USB 硬件断开后的 kerneloops)

root@server:~# ps aux | grep apache2 | grep -v grep
www-data 12917  0.0  0.1 412148 16156 ?        D    Jun27   0:00 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)

自然,我kill做到了。它还活着。所以我kill -9做了。它仍然“活着”。

现在这就是问题得到 serverfault/unix&linux 值得的地方:有没有办法在不做明显的事情的情况下恢复端口 443 :重新启动?iptables 已安装。

更新:我无法在不重新启动的情况下解决问题。如果没有其他(可能)硬件缺陷,此处和“重复”中描述的一般方法(使用lsof或/proc/$PID/fd找出哪个驱动器并摆脱该驱动器)很可能会起作用。

ori*_*ion 24

“D”状态是不可杀死的。一个进程只能在它在用户空间时被杀死(它的代码正在做任何事情)。当系统调用被调用时(最常见的问题是输入-输出操作),内核会接管直到系统调用返回。在内核模式下,进程不能被杀死。中止内核代码对整个系统来说是危险的,此外,如果处于内核模式的进程在不受控制的情况下是否应该监听信号,这也是一个哲学问题。

因此,退出内核模式的唯一方法是代码本身的超时/中止。网络驱动器上的 I/O 操作通常是过度保护的,不想放弃以避免数据丢失。如果您的网络驱动器无法访问(或任何其他 I/O、设备访问/...失败),那么您的进程几乎可以无限期地在“磁盘僵死”状态下等待。

如果有问题的驱动器被强行卸载,进程通常会死掉。