Родительский процесс должен отслеживать смерть
своих детей, для этого регистрирую обрабочик
для SIGCHLD
//function for catch SIGCHILD
void sig_child ( int sig_in)
{
fprintf ( stderr, "\none child dead :))\n");
child_count--;
int status;
wait4 ( &status);
};
но если умарает два потомка пока родитель не работает
то один из них превращается в зомби.
Попытался использовать вместо wait wait4, но он входит
в бесконечный цикл.
//function for catch SIGCHILD
void sig_child ( int sig_in)
{
fprintf ( stderr, "\none child dead :))\n");
child_count--;
int status;
pid_t pid = -1;
struct rusage rsg;
while ( wait4 ( pid, &status, WNOHANG, &rsg))
{
child_count--;
fprintf ( stderr, "\none child dead :))\n");
};
};
Подскажите в чем моя ошибка и как
вообще решается такая проблема.