diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | src/timeout.c | 7 |
2 files changed, 7 insertions, 3 deletions
@@ -24,6 +24,9 @@ GNU coreutils NEWS -*- outline -*- were first renamed or unlinked or never modified. [The race was introduced in coreutils-7.5] + timeout now doesn't exit unless the command it is monitoring does, + for any specified signal. [bug introduced in coreutils-7.0]. + ** Changes in behavior chroot, env, nice, and su fail with status 125, rather than 1, on diff --git a/src/timeout.c b/src/timeout.c index 7b0f1d7c5..3babb8c26 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -196,7 +196,7 @@ apply_time_suffix (unsigned long *x, char suffix_char) } static void -install_signal_handlers (void) +install_signal_handlers (int sigterm) { struct sigaction sa; sigemptyset(&sa.sa_mask); /* Allow concurrent calls to handler */ @@ -206,8 +206,9 @@ install_signal_handlers (void) sigaction (SIGALRM, &sa, NULL); /* our timeout. */ sigaction (SIGINT, &sa, NULL); /* Ctrl-C at terminal for example. */ sigaction (SIGQUIT, &sa, NULL); /* Ctrl-\ at terminal for example. */ - sigaction (SIGTERM, &sa, NULL); /* if we're killed, stop monitored proc. */ sigaction (SIGHUP, &sa, NULL); /* terminal closed for example. */ + sigaction (SIGTERM, &sa, NULL); /* if we're killed, stop monitored proc. */ + sigaction (sigterm, &sa, NULL); /* user specified termination signal. */ } int @@ -271,7 +272,7 @@ main (int argc, char **argv) /* Setup handlers before fork() so that we handle any signals caused by child, without races. */ - install_signal_handlers (); + install_signal_handlers (term_signal); signal (SIGTTIN, SIG_IGN); /* don't sTop if background child needs tty. */ signal (SIGTTOU, SIG_IGN); /* don't sTop if background child needs tty. */ |