void HandSigCHLD(int sig) { int errno_save; int status; pid_t pid; /* save errno current value */ errno_save = errno; /* loop until no */ do { errno = 0; pid = waitpid(WAIT_ANY, &status, WNOHANG); if (pid > 0) { debug("child %d terminated with status %x\n", pid, status); } } while ((pid > 0) && (errno == EINTR)); /* restore errno value */ errno = errno_save; /* return */ return; }