diff options
-rw-r--r-- | coreutils/timeout.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/coreutils/timeout.c b/coreutils/timeout.c index 663303c2d..e42aba85c 100644 --- a/coreutils/timeout.c +++ b/coreutils/timeout.c @@ -39,10 +39,10 @@ //kbuild:lib-$(CONFIG_TIMEOUT) += timeout.o //usage:#define timeout_trivial_usage -//usage: "[-t SECS] [-s SIG] PROG ARGS" +//usage: "[-s SIG] SECS PROG ARGS" //usage:#define timeout_full_usage "\n\n" //usage: "Runs PROG. Sends SIG to it if it is not gone in SECS seconds.\n" -//usage: "Defaults: SECS: 10, SIG: TERM." +//usage: "Default SIG: TERM." #include "libbb.h" @@ -52,8 +52,7 @@ int timeout_main(int argc UNUSED_PARAM, char **argv) int signo; int status; int parent = 0; - unsigned timeout; - const char *timeout_s = "10"; + int timeout; pid_t pid; #if !BB_MMU char *sv1, *sv2; @@ -64,12 +63,18 @@ int timeout_main(int argc UNUSED_PARAM, char **argv) /* -t SECONDS; -p PARENT_PID */ /* '+': stop at first non-option */ - getopt32(argv, "+s:t:" USE_FOR_NOMMU("p:+"), &opt_s, &timeout_s, &parent); + getopt32(argv, "+s:" USE_FOR_NOMMU("p:+"), &opt_s, &parent); /*argv += optind; - no, wait for bb_daemonize_or_rexec! */ + signo = get_signum(opt_s); if (signo < 0) bb_error_msg_and_die("unknown signal '%s'", opt_s); - timeout = parse_duration_str((char*)timeout_s); + + if (!argv[optind]) + bb_show_usage(); + timeout = parse_duration_str(argv[optind++]); + if (!argv[optind]) /* no PROG? */ + bb_show_usage(); /* We want to create a grandchild which will watch * and kill the grandparent. Other methods: @@ -77,12 +82,10 @@ int timeout_main(int argc UNUSED_PARAM, char **argv) * (example: "tcpsvd 0.0.0.0 1234 timeout service_prog" - * it's better if service_prog is a child of tcpsvd!), * making child watch parent results in programs having - * unexpected children. */ + * unexpected children. */ if (parent) /* we were re-execed, already grandchild */ goto grandchild; - if (!argv[optind]) /* no PROG? */ - bb_show_usage(); #if !BB_MMU sv1 = argv[optind]; |