Я использую posix_spawnp для порождения дочерних процессов из моего основного процесса.
int iRet = posix_spawnp(&iPID, zPath, NULL, NULL, argv, environ);
if (iRet != 0)
{
return false;
}
Иногда после того, как дочерний процесс создается без ошибок, он внезапно перестает функционировать. Как это могло произойти?
Я использую обработчик сигнала для сбора дочерних процессов:
void SigCatcher(int n)
{
while(waitpid( -1, NULL, WNOHANG ) > 0);
}
и я вызываю его вручную всякий раз, когда убиваю дочерний процесс.
kill(oProcID, SIGKILL);
signal (SIGCHLD, SigCatcher);
Может ли это привести к тому, что порожденные дети перестают существовать (я не призываю убить)?