ps
目前显示有 17617 个僵尸进程,所有进程的 ppid 均为 1/init。init 应该正在清理这些已停止运行的进程,但不知为何并未清理。已停止运行的进程数量正在增加。
尝试强制使用它们进行收割preap
会失败:
preap: Failed to reap 15977: the only non-defunct ancestor is 'init'
顺便说一下,下面是我计算进程的方法:
% ps -e -o pid,s,ppid | awk 'index($2,"Z")>0 {ppid[$3]=ppid[$3]+1} END {for (key in ppid) print key,ppid[key]}'
1 17617
我发现这个令人不安的日志条目:
Jun 20 22:45:34 host genunix: [ID 470503 kern.warning] WARNING: Sorry, no swap space to grow stack for pid 1 (init)
操作系统是 Solaris 10(SunOS host 5.10 Generic_150401-04 i86pc i386 i86pc
)。
答案1
事实证明,init 只是停止了正常工作,可能是因为系统出现了交换 I/O 问题。
事实证明,如果 init 在关闭操作系统的过程之外退出,它只会重新启动。因此,我向 init 发送了一个 SIGSEGV(以确保它不会模仿它确定正在关闭的方式),它重新启动了 init(仍然是 pid 1),新的 init 立即收割了所有未完成的僵尸进程。
不过,我可能应该重新启动以清除由于交换 I/O 问题可能存在的任何其他问题。