> Shouldn't '--' be taken care by getopt/getopt32 so all applets benefit > from it? (I thought it already did that...)
Nevermind. I just saw kill doesn't use getopt... :/ > 2017-08-28 14:07 GMT+02:00 Denys Vlasenko <[email protected]>: >> Applied, thanks. >> >> On Sun, Aug 27, 2017 at 9:25 AM, Ron Yorston <[email protected]> wrote: >>> 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
