aboutsummaryrefslogtreecommitdiff
path: root/toys/other/timeout.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/other/timeout.c')
-rw-r--r--toys/other/timeout.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/toys/other/timeout.c b/toys/other/timeout.c
index 4b8a87df..f8acabf5 100644
--- a/toys/other/timeout.c
+++ b/toys/other/timeout.c
@@ -60,15 +60,14 @@ void timeout_main(void)
if (TT.s_signal && -1 == (TT.nextsig = sig_to_num(TT.s_signal)))
error_exit("bad -s: '%s'", TT.s_signal);
- if (!(TT.pid = fork())) xexec_optargs(1);
+ if (!(TT.pid = xfork())) xexec_optargs(1);
else {
int status;
signal(SIGALRM, handler);
setitimer(ITIMER_REAL, &TT.itv, (void *)&toybuf);
while (-1 == waitpid(TT.pid, &status, 0) && errno == EINTR);
- if (WIFEXITED(status)) toys.exitval = WEXITSTATUS(status);
- else if (WIFSIGNALED(status)) toys.exitval = WTERMSIG(status);
- else toys.exitval = 1;
+ toys.exitval = WIFEXITED(status)
+ ? WEXITSTATUS(status) : WTERMSIG(status) + 127;
}
}