我有一台带有大量僵尸进程的服务器。将近一千。如果可能的话,我想收获这些进程,因为父进程(一个父进程导致所有 1000 个僵尸)似乎不会调用等待函数。我看到 bash 有一个内置的等待函数,但是当我用它来尝试收获其中一个僵尸时,我收到以下错误。
# wait 17517
bash: wait: pid 17517 is not a child of this shell
我是 root,但这似乎没有什么区别。我有几个问题
- 如果僵尸进程不是我的 shell 的子进程,我可以获取它吗?
- 如果没有,我能做些什么吗?我不确定我是否应该杀死父母
- 我应该担心吗?看起来父级有资源泄漏并且没有垃圾收集或其他什么。
答案1
- 如果僵尸进程不是我的 shell 的子进程,我可以获取它吗?
不,你不能。
- 如果没有,我能做些什么吗?我不确定我是否应该杀死父母
您可以尝试停止父进程,然后exec
从忽略 的 shell重新启动它SIGCHLD
。忽视的父母SIGCHLD
不会离开僵尸。
- 我应该担心吗?看起来父级有资源泄漏并且没有垃圾收集或其他什么。
如果僵尸数量增加,最终你将达到无法分叉新进程的地步。