这个调度程序会产生僵尸进程吗?

这个调度程序会产生僵尸进程吗?

我有这样一个调度程序 shell 脚本。

while read line
do
    java TestProg $line &
done < $tasklist

僵尸进程维基百科页面, 它说

如果父进程调用 wait 失败,僵尸进程将留在进程表中,导致资源泄漏

在上面的脚本中我没有使用该wait函数(我用这种方式编写了许多调度程序shell脚本)。我想知道我是否需要wait这样使用,以便我可以防止僵尸进程:

while read line
do
    java TestProg $line &
done < $tasklist
wait

答案1

我有2个答案:

如果父进程死亡/结束,则进程将由 init 继承。 init 会为你做这件事。因此,对于短期流程,您不必担心。建议应致电waitexit

我认为 bash 调用 wait 并将退出代码放在某处。

wait只获取退出代码,然后收获进程。 zombi 使用很少的资源,除了进程表中的一个槽:进程 ID 等之外,所有资源都被释放。

僵尸死了:除了进程表中的槽之外,它的所有资源都被释放。其进程表槽未被释放的原因是,父进程可以(除其他外)获取其返回码并向刚刚死亡的子进程发出信号,而不会影响另一个正在重用进程标识(pid)的进程。

相关内容