
Tengo un script de shell de despachador.
while read line
do
java TestProg $line &
done < $tasklist
Sobre elPágina de Wikipedia del proceso zombie, dice
Si un padre no llama a esperar, el zombi quedará en la tabla de procesos, provocando una pérdida de recursos.
en el script anterior no utilicé la wait
función (escribí muchos scripts de shell del despachador de esta manera). Me pregunto si necesito un uso wait
como este para poder evitar procesos zombies:
while read line
do
java TestProg $line &
done < $tasklist
wait
Respuesta1
Tengo 2 respuestas:
Si el padre muere/termina, entonces los procesos son heredados por init. init lo hará por ti. Así que para procesos de corta duración no tienes que preocuparte. El consejo debe ser llamar wait
o exit
.
Creo que las llamadas de bash te esperan y colocan el código de salida en alguna parte.
wait
solo obtiene los códigos de salida y luego cosecha el proceso. Un zombie usa pocos recursos, todos están liberados, excepto un espacio en la tabla de procesos: la identificación del proceso, etc.
Un zombie está muerto: todos sus recursos se liberan, excepto su lugar en la tabla de procesos. La razón por la que su espacio en la tabla de procesos no se libera es para que el padre pueda (entre otras cosas) obtener su código de retorno y señalar a un niño que acaba de morir sin acceder a otro proceso que esté reutilizando la identidad del proceso (pid).