X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=src%2Freaper.c;h=9da212494dafadd9022e3cfc288b453aef2a39fc;hb=999f45597a2b2461d43d05b3a4726c29d2eed0ac;hp=f1c2f9aea09e3c2a11f6e49965798cd3614c7ab5;hpb=31e7fe4de0502c6065244d07ebbae7410c7da9f7;p=rrq%2Foverlay-boot.git diff --git a/src/reaper.c b/src/reaper.c index f1c2f9a..9da2124 100644 --- a/src/reaper.c +++ b/src/reaper.c @@ -1,19 +1,21 @@ -#include +/** + * This program waits for child process and "reaps" them, i.e. read + * off their status so that they can terminate. The program exits when + * it runs out of children. + */ #include #include -#include #include -#include int main(void) { - sigset_t set; - siginfo_t status; + sigset_t set; + siginfo_t status; - if (getpid()!=1) - return 1; - sigfillset(&set); - sigprocmask(SIG_BLOCK,&set,NULL); - memset(&status,0,sizeof status); - while (-ECHILD!=waitid(P_ALL,0,&status,WEXITED)); - return 1; + sigfillset(&set); + sigprocmask(SIG_BLOCK,&set,NULL); + + do { + memset( &status, 0, sizeof( status ) ); + } while ( waitid( P_ALL, 0, &status, WEXITED ) == 0 ); + return 0; }