Applied, thanks.
On Sun, Aug 27, 2017 at 9:25 AM, Ron Yorston <r...@pobox.com> 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 <r...@pobox.com> > --- > 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 > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox