Tengo un inconveniente, estoy desarrollando un demonio en Unix que ejecuta en background un programa administrador de colas de procesos, el cual ante algun cambio de estado en la BD ejecuta en background programas asociados que distribuyen y procesan los datos de la BD :
Para ello, utilizo system() y del shell nohup (para independizar del proceso padre) y & (para demonizar el proceso que se ejecuta) :
prg demonio()
... otras cosas
system("nohup administradordecolas > administradordecolas.out 2>&1 &");
... demas cosas
prg administradordecolas()
...
if(estado == 1)
system("nohup programaasociado > programaasociado.out 2>&1 &");
...
PERO, quedan procesos defunct (zombies), que por lo que entiendo, quedan asi porque el proceso padre llamador se muere antes que el hijo.
Modifique el programa, cambie el system() por fork() y execvp() y mas encima agregue signal(SIGCLD, wait_on_child); que se supone que espera el proceso hijo y lo termina adecuadamente :
wait_on_child()
{
int status;
while( wait3(&status, WNOHANG, (struct rusage *) 0) > 0 ) ;
}
Lamentablemente, el problema persiste.
Agradeceria alguna informacion para resolver esto. Gracias.