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
)。
原来,init 只是停止了正常工作,可能是当系统在交换时遇到 I/O 问题。
事实证明,如果 init 在关闭操作系统的过程之外退出,它只会重新启动。所以我向 init 发送了一个 SIGSEGV(以确保它不会模仿,但它确定正在关闭),它重新启动了 init(仍然是 pid 1),并且新的 init 立即收获了所有那些优秀的僵尸。
但是,我可能应该重新启动以清除由于交换 I/O 问题而可能存在的任何其他问题。