enum HANDLE_RESULT handle_signal(int fd, pid_t child_pid) { siginfo_t info; if (read(fd, &info, sizeof(info)) == -1) { ERRMSG("read() failed"); return KILL_CHILD; } if (info.si_signo != SIGCHLD) { if (kill_and_wait_sigchild(child_pid, SIGTERM, 1) == -1) { return KILL_CHILD; } } return WAIT_CHILD_EXIT; }
enum HANDLE_RESULT handle_signal(const sigset_t * sigs, pid_t child_pid) { if (sigisemptyset(sigs)) { return IGNORE; } if (! sigismember(sigs, SIGCHLD)) { if (kill_and_wait_sigchild(child_pid, SIGTERM, 1) == -1) { return KILL_CHILD; } } return WAIT_CHILD_EXIT; }
enum HANDLE_RESULT handle_in_eof(int fd, pid_t child_pid) { if (kill_and_wait_sigchild(child_pid, SIGTERM, 1) == -1) { return KILL_CHILD; } return WAIT_CHILD_EXIT; }