static void handle_signals (void) { for (;;) switch (selfpipe_read()) { case -1 : strerr_diefu1sys(111, "selfpipe_read") ; case 0 : return ; case SIGCHLD : wait_reap() ; break ; default : strerr_dief1x(101, "unexpected data in selfpipe") ; } }
static void handle_signals (void) { for (;;) { switch (selfpipe_read()) { case -1 : cleanup() ; strerr_diefu1sys(111, "selfpipe_read") ; case 0 : return ; case SIGTERM : case SIGQUIT : case SIGHUP : case SIGABRT : case SIGINT : cleanup() ; _exit(0) ; case SIGCHLD : wait_reap() ; break ; default : cleanup() ; X() ; } } }
static void handle_signals (void) { for (;;) { switch (selfpipe_read()) { case -1 : panic("selfpipe_read") ; case 0 : return ; case SIGCHLD : wantreap = 1 ; break ; case SIGALRM : wantscan = 1 ; break ; case SIGTERM : term() ; break ; case SIGHUP : hup() ; break ; case SIGQUIT : quit() ; break ; case SIGABRT : cont = 0 ; break ; case SIGINT : intr() ; break ; case SIGUSR1 : usr1() ; break ; } } }
static void handle_signals (void) { for (;;) { char c = selfpipe_read() ; switch (c) { case -1 : strerr_diefu1sys(111, "selfpipe_read") ; case 0 : return ; case SIGCHLD : if (!status.pid) wait_reap() ; else { int wstat ; int r = wait_pid_nohang(status.pid, &wstat) ; if (r < 0) if (errno != ECHILD) strerr_diefu1sys(111, "wait_pid_nohang") ; else break ; else if (!r) break ; status.pid = wstat ; /* don't overwrite status.wstat if it's ./finish */ (*actions[state][V_CHLD])() ; } break ; case SIGTERM : (*actions[state][V_TERM])() ; break ; case SIGHUP : (*actions[state][V_HUP])() ; break ; case SIGQUIT : (*actions[state][V_QUIT])() ; break ; default : strerr_dief1x(101, "internal error: inconsistent signal state. Please submit a bug-report.") ; } } }