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 <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
diff --git a/procps/kill.c b/procps/kill.c
index 0ddae2f..24cc903 100644
--- a/procps/kill.c
+++ b/procps/kill.c
@@ -184,6 +184,10 @@
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 @@
bb_error_msg("bad signal name '%s'", arg);
return EXIT_FAILURE;
}
+ do_it_sooner:
arg = *++argv;
do_it_now: