我怎样才能获得一个不是我的 shell 子进程的僵尸进程?

我怎样才能获得一个不是我的 shell 子进程的僵尸进程?

我有一台带有大量僵尸进程的服务器。将近一千。如果可能的话,我想收获这些进程,因为父进程(一个父进程导致所有 1000 个僵尸)似乎不会调用等待函数。我看到 bash 有一个内置的等待函数,但是当我用它来尝试收获其中一个僵尸时,我收到以下错误。

# wait 17517
bash: wait: pid 17517 is not a child of this shell

我是 root,但这似乎没有什么区别。我有几个问题

  1. 如果僵尸进程不是我的 shell 的子进程,我可以获取它吗?
  2. 如果没有,我能做些什么吗?我不确定我是否应该杀死父母
  3. 我应该担心吗?看起来父级有资源泄漏并且没有垃圾收集或其他什么。

答案1

  1. 如果僵尸进程不是我的 shell 的子进程,我可以获取它吗?

不,你不能。

  1. 如果没有,我能做些什么吗?我不确定我是否应该杀死父母

您可以尝试停止父进程,然后exec从忽略 的 shell重新启动它SIGCHLD。忽视的父母SIGCHLD不会离开僵尸。

  1. 我应该担心吗?看起来父级有资源泄漏并且没有垃圾收集或其他什么。

如果僵尸数量增加,最终你将达到无法分叉新进程的地步。

相关内容