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
自然,我kill
做到了。它还活着。所以我kill -9
做到了。它仍然“活着”。
现在这就是 serverfault/unix&linux-worthy 的问题所在:有没有办法恢复端口 443没有做显而易见的事情:重新启动? iptables 已安装。
更新:我可以不是无需重新启动即可解决问题。如果没有额外的(可能的)硬件缺陷,此处和“重复”中描述的一般方法(使用lsof
或/proc/$PID/fd
找出哪个驱动器并删除该驱动器)很可能有效。
答案1
“D”状态是无法杀死的。进程只有在用户空间中时才能被杀死(它的代码正在做任何正在做的事情)。当调用系统调用时(最常见的问题是输入输出操作),内核将接管直到系统调用返回。在内核模式下,进程无法被终止。中止内核代码对整个系统来说是危险的,此外,内核模式下的进程是否应该在不受控制的情况下监听信号也是一个哲学问题。
因此,退出内核模式的唯一方法是代码本身超时/中止。网络驱动器上的 I/O 操作通常会过度保护,不想放弃以避免数据丢失。如果您的网络驱动器无法访问(或任何其他 I/O、设备访问/...失败),那么您的进程可能会在“磁盘僵尸”状态下几乎无限期地等待。
如果有问题的驱动器被强制卸载,进程通常会终止。