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:
parent
14551b7036
commit
0b6ec06beb
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user