
Eu tenho um script de shell de despachante.
while read line
do
java TestProg $line &
done < $tasklist
Nopágina da Wikipédia sobre processo zumbi, diz
se um pai não chamar wait, o zumbi será deixado na tabela de processos, causando um vazamento de recursos
no script acima eu não usei a wait
função (escrevi muitos scripts de shell do despachante dessa forma). Estou me perguntando se preciso usar wait
assim para poder evitar processos zumbis:
while read line
do
java TestProg $line &
done < $tasklist
wait
Responder1
Eu tenho 2 respostas:
Se o pai morrer/terminar, os processos serão herdados pelo init. init fará isso por você. Portanto, para processos de curta duração, você não precisa se preocupar. O conselho deve ser ligar wait
ou exit
.
Acho que as chamadas bash esperam por você e colocam o código de saída em algum lugar.
wait
obtém apenas os códigos de saída e depois colhe o processo. Um zumbi usa poucos recursos, todos são liberados, exceto um slot na tabela de processos: o id do processo etc.
Um zumbi está morto: todos os seus recursos são liberados, exceto seu slot na tabela de processos. A razão pela qual seu slot na tabela de processos não é liberado é para que o pai possa (entre outras coisas) obter seu código de retorno e sinalizar um filho que acabou de morrer sem atingir outro processo que está reutilizando a identidade do processo (pid).