X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=timelimit.c;h=7232ecf1610efbd5155759f3a61c24003149aa47;hb=13df6dca7663fe0a3966a96a7799f62dc3030844;hp=5b8281cb0dc6ad0b22421e5b8a807abb21470ebb;hpb=d2ff2d92f7a363909da29055b89093f99548040b;p=build-farm.git diff --git a/timelimit.c b/timelimit.c index 5b8281cb..7232ecf1 100644 --- a/timelimit.c +++ b/timelimit.c @@ -23,6 +23,8 @@ static void usage(void) printf(" after 5s SIGKILL will be passed and exit(1)\n"); printf(" SIGTERM - passes SIGTERM to command's process group\n"); printf(" after 1s SIGKILL will be passed and exit(1)\n"); + printf(" SIGINT - handled like SIGTERM\n"); + printf(" SIGQUIT - handled like SIGTERM\n"); } static void sig_alrm_kill(int sig) @@ -34,16 +36,18 @@ static void sig_alrm_kill(int sig) static void sig_alrm_term(int sig) { + fprintf(stderr, "\nMaximum time expired in timelimit - sending TERM To child\n"); kill(-child_pid, SIGTERM); - alarm(5); signal(SIGALRM, sig_alrm_kill); + alarm(5); } static void sig_term(int sig) { + fprintf(stderr, "\nReceived TERM/INT/QUIT signal\n"); kill(-child_pid, SIGTERM); - alarm(1); signal(SIGALRM, sig_alrm_kill); + alarm(1); } static void sig_usr1(int sig) @@ -53,17 +57,10 @@ static void sig_usr1(int sig) static void new_process_group(void) { -#ifdef BSD_SETPGRP - if (setpgrp(0,0) == -1) { - perror("setpgrp"); - exit(1); - } -#else - if (setpgrp() == -1) { - perror("setpgrp"); + if (setpgid(0,0) == -1) { + perror("setpgid"); exit(1); } -#endif } @@ -87,6 +84,8 @@ int main(int argc, char *argv[]) } signal(SIGTERM, sig_term); + signal(SIGINT, sig_term); + signal(SIGQUIT, sig_term); signal(SIGUSR1, sig_usr1); signal(SIGALRM, sig_alrm_term); alarm(maxtime); @@ -95,7 +94,9 @@ int main(int argc, char *argv[]) int status; pid_t pid = wait(&status); if (pid != -1) { - ret = WEXITSTATUS(status); + if (WIFEXITED(status)) { + ret = WEXITSTATUS(status); + } } else if (errno == ECHILD) { break; }