void childSignalHandler(int signo) {
int status;
pid_t pid = wait(&status);
struct PIDList* record = getRecordForPID(childlist, pid);
if (recor
Note signals are not queued. If two children die in quick succession, you may only recieve one SIGCHLD
. So, you should actually loop around calling waitpid()
until there are no more exiting processes to handle:
int status;
pid_t pid;
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
if (WIFEXITED(status)) {
struct PIDList *record = getRecordForPID(childlist, pid);
if (record != NULL)
record->returnValue = WEXITSTATUS(status);
}
}