X-Git-Url: http://git.samba.org/?a=blobdiff_plain;f=timelimit.c;h=7232ecf1610efbd5155759f3a61c24003149aa47;hb=01ab8dc8abf928cf030a955cfae2ea680597ee24;hp=32e58f52498cb8b514ced302ccaf9e7c93108f49;hpb=60636f21d4ce7804381ac27e6c8930fd6613605d;p=build-farm.git diff --git a/timelimit.c b/timelimit.c index 32e58f52..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) @@ -80,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); @@ -88,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; }