RETURN VALUES
If wait() returns due to a stopped or terminated child process,
the process ID of the child is returned to the calling process.
Otherwise, a value of -1 is returned and errno is set to indicate
the error.
Я делал так,
в основном цикле обрабатывается сигнал:
----------------------
// завершение потомка
if (SigId==SIGCHLD)
{
int status=0;
int pp = waitpid(-1,&status,WNOHANG);
if (!WIFEXITED(status))
{
------------------
где в pp пид потомка
естественно нужно указать демону что этот сигнал должен обработаться
sigdelset( &SigSet, SIGCHLD );
// начало основной фунции примерно такое
alarm(TimeUp*60); // в минутах
sigfillset( &SigSet );
sigdelset( &SigSet, SIGTERM );
sigdelset( &SigSet, SIGIO );
sigdelset( &SigSet, SIGCHLD );
sigdelset( &SigSet, SIGHUP);
sigdelset( &SigSet, SIGALRM );
sigdelset( &SigSet, SIGALRM );
while (SigId!=SIGTERM)
{
SigId=0;
sigsuspend(&SigSet);
---------
SigId меняется в функции обработки сигнала