Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}