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>
This commit is contained in:
Ron Yorston 2017-08-27 08:25:18 +01:00 committed by Denys Vlasenko
parent 14551b7036
commit 0b6ec06beb

View File

@ -184,6 +184,10 @@ int kill_main(int argc UNUSED_PARAM, char **argv)
if (is_killall5 && arg[0] == 'o') if (is_killall5 && arg[0] == 'o')
goto do_it_now; 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? */ if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
arg = *++argv; arg = *++argv;
} /* else it must be -SIG */ } /* 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); bb_error_msg("bad signal name '%s'", arg);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
do_it_sooner:
arg = *++argv; arg = *++argv;
do_it_now: do_it_now: