version 1.126, 2012/10/02 10:29:30 |
version 1.127, 2012/10/04 13:20:46 |
|
|
static void notice_signal(int); |
static void notice_signal(int); |
static void setup_all_signals(void); |
static void setup_all_signals(void); |
static void setup_job_control_interrupts(void); |
static void setup_job_control_interrupts(void); |
|
static void killcheck(pid_t, int); |
|
|
|
static void |
|
killcheck(pid_t pid, int signo) |
|
{ |
|
if (kill(pid, signo) == 0) |
|
return; |
|
if (errno == ESRCH) { |
|
fprintf(stderr, |
|
"Can't send signal %d to %ld: pid not found\n", |
|
signo, (long)pid); |
|
} else if (errno == EPERM) { |
|
fprintf(stderr, |
|
"Can't send signal %d to %ld: not permitted\n", |
|
signo, (long)pid); |
|
} |
|
} |
|
|
static void |
static void |
print_error(Job *j, Job *k) |
print_error(Job *j, Job *k) |
{ |
{ |
|
|
/* Have to see SIGCHLD */ |
/* Have to see SIGCHLD */ |
setup_signal(SIGCHLD); |
setup_signal(SIGCHLD); |
got_fatal = 0; |
got_fatal = 0; |
setup_job_control_interrupts(); |
|
setup_signal(SIGWINCH); |
|
setup_signal(SIGCONT); |
|
got_other = 0; |
got_other = 0; |
} |
} |
|
|
|
|
debug_job_printf("pass_job_control_signal to " |
debug_job_printf("pass_job_control_signal to " |
"child %ld running %s.\n", (long)job->pid, |
"child %ld running %s.\n", (long)job->pid, |
job->node->name); |
job->node->name); |
killpg(job->pid, signo); |
killcheck(job->pid, signo); |
} |
} |
/* after forwarding the signal, those should interrupt us */ |
/* after forwarding the signal, those should interrupt us */ |
if (signo == SIGTSTP || signo == SIGTTOU || signo == SIGTTIN) { |
if (signo == SIGTSTP || signo == SIGTTOU || signo == SIGTTIN) { |
|
|
debug_job_printf("handle_fatal_signal: passing to " |
debug_job_printf("handle_fatal_signal: passing to " |
"child %ld running %s.\n", (long)job->pid, |
"child %ld running %s.\n", (long)job->pid, |
job->node->name); |
job->node->name); |
killpg(job->pid, signo); |
killcheck(job->pid, signo); |
} |
} |
|
|
if (signo == SIGINT && !touchFlag) { |
if (signo == SIGINT && !touchFlag) { |