From: Ron Yorston Date: Sun, 27 Aug 2017 07:25:18 +0000 (+0100) Subject: kill: add '--' option to separate options from arguments X-Git-Tag: 1_28_0~92 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0b6ec06bebc8774ed3b70857ff81901aca4804f4;p=oweals%2Fbusybox.git kill: add '--' option to separate options from arguments Using a negative pid to send TERM to a process group results in an obscure error: $ ./busybox kill -12345 kill: bad signal name '12345' This is intended. Manpage says: ARGUMENTS pid Each pid can be one of four things: ... -n where n is larger than 1. All processes in process group n are signaled. When an argument of the form '-n' is given, and it is meant to denote a process group, either a signal must be specified first, or the argument must be preceded by a '--' option, otherwise it will be taken as the signal to send. However, we did not support "--". Add this capability to BusyBox. function old new delta kill_main 993 999 +6 Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- diff --git a/procps/kill.c b/procps/kill.c index 0ddae2f70..24cc903fc 100644 --- a/procps/kill.c +++ b/procps/kill.c @@ -184,6 +184,10 @@ int kill_main(int argc UNUSED_PARAM, char **argv) if (is_killall5 && arg[0] == 'o') goto do_it_now; + /* "--" separates options from args. Testcase: "kill -- -123" */ + if (!is_killall5 && arg[0] == '-' && arg[1] == '\0') + goto do_it_sooner; + if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */ arg = *++argv; } /* else it must be -SIG */ @@ -192,6 +196,7 @@ int kill_main(int argc UNUSED_PARAM, char **argv) bb_error_msg("bad signal name '%s'", arg); return EXIT_FAILURE; } + do_it_sooner: arg = *++argv; do_it_now: