Using a negative pid to send TERM to a process group results in an obscure error:
$ ./busybox kill -12345 kill: bad signal name '12345' There are a couple of workarounds: - specify the signal: 'kill -TERM -12345' - use the 'shell hack' and add a leading space to the argument: 'kill " -12345"'. This only works if the shell hack is enabled. The full versions of kill and killall provide a '--' argument to separate options from arguments. Add this capability to BusyBox. This doesn't avoid the need for the shell hack, which is only partly about handling arguments that start with a dash: it also packs multiple pids into a single argument. bloat-o-meter gives the somewhat unbelievable result: function old new delta kill_main 993 999 +6 packed_usage 32073 32047 -26 .rodata 164190 164164 -26 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 6/-52) Total: -46 bytes text data bss dec hex filename 872711 4110 1944 878765 d68ad busybox_old 872691 4110 1944 878745 d6899 busybox_unstripped A few more changes like that and BusyBox will take a negative amount of disk space. Signed-off-by: Ron Yorston <[email protected]> --- procps/kill.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/procps/kill.c b/procps/kill.c index 0ddae2f70..e085f4d56 100644 --- a/procps/kill.c +++ b/procps/kill.c @@ -42,7 +42,7 @@ //kbuild:lib-$(CONFIG_KILLALL5) += kill.o //usage:#define kill_trivial_usage -//usage: "[-l] [-SIG] PID..." +//usage: "[-l] [-SIG] [--] PID..." //usage:#define kill_full_usage "\n\n" //usage: "Send a signal (default: TERM) to given PIDs\n" //usage: "\n -l List all signal names and numbers" @@ -59,7 +59,7 @@ //usage: "$ kill 252\n" //usage: //usage:#define killall_trivial_usage -//usage: "[-l] [-q] [-SIG] PROCESS_NAME..." +//usage: "[-l] [-q] [-SIG] [--] PROCESS_NAME..." //usage:#define killall_full_usage "\n\n" //usage: "Send a signal (default: TERM) to given processes\n" //usage: "\n -l List all signal names and numbers" @@ -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 arguments */ + if (!is_killall5 && arg[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: -- 2.13.5 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
