--- libelwix/src/pio.c 2013/12/05 15:13:58 1.1.2.3 +++ libelwix/src/pio.c 2013/12/05 15:38:14 1.1.2.4 @@ -198,3 +198,36 @@ pio_pgetpid(FILE * __restrict iop) return p; } + +/* + * pio_pchkpid() - Check exit status of child programs + * + * @pids = return tagPIOPID structures of exited programs, + * if !=NULL must call array_Destroy() + * return: -1 error or >-1 exited programs + */ +int +pio_pchkpid(array_t ** __restrict pids) +{ + register int ret = 0; + struct tagPIOPID *p; + array_t *pa; + + if (pids) { + if (!(pa = array_Init(0))) + return -1; + else + *pids = pa; + } + + THREAD_LOCK(); + SLIST_FOREACH(p, &pio_pidlist, next) + if (p->fp && waitpid(p->pid, &p->stat, WNOHANG) > 0) { + if (pids) + array_Push(pa, p, 0); + ret++; + } + THREAD_UNLOCK(); + + return ret; +}