61 static int timed_wait_expired;
65 static void timed_wait_alarm(
int unused_sig)
75 timed_wait_expired = 1;
83 const char *myname =
"timed_waitpid";
84 struct sigaction action;
85 struct sigaction old_action;
93 msg_panic(
"%s: bad time limit: %d", myname, time_limit);
98 sigemptyset(&action.sa_mask);
100 action.sa_handler = timed_wait_alarm;
101 if (sigaction(SIGALRM, &action, &old_action) < 0)
102 msg_fatal(
"%s: sigaction(SIGALRM): %m", myname);
103 timed_wait_expired = 0;
104 time_left = alarm(time_limit);
109 if ((wpid = waitpid(pid, statusp, options)) < 0 && timed_wait_expired)
116 if (sigaction(SIGALRM, &old_action, (
struct sigaction *) 0) < 0)
117 msg_fatal(
"%s: sigaction(SIGALRM): %m", myname);
NORETURN msg_panic(const char *fmt,...)
int timed_waitpid(pid_t pid, WAIT_STATUS_T *statusp, int options, int time_limit)
NORETURN msg_fatal(const char *fmt,...)