我有这样一个调度程序 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 会为你做这件事。因此,对于短期流程,您不必担心。建议应致电wait
或exit
。
我认为 bash 调用 wait 并将退出代码放在某处。
wait
只获取退出代码,然后收获进程。 zombi 使用很少的资源,除了进程表中的一个槽:进程 ID 等之外,所有资源都被释放。
僵尸死了:除了进程表中的槽之外,它的所有资源都被释放。其进程表槽未被释放的原因是,父进程可以(除其他外)获取其返回码并向刚刚死亡的子进程发出信号,而不会影响另一个正在重用进程标识(pid)的进程。