diff options
Diffstat (limited to 'toys')
-rw-r--r-- | toys/killall.c | 34 | ||||
-rw-r--r-- | toys/pidof.c | 32 |
2 files changed, 23 insertions, 43 deletions
diff --git a/toys/killall.c b/toys/killall.c index fb3e8cb3..5f18a646 100644 --- a/toys/killall.c +++ b/toys/killall.c @@ -1,13 +1,12 @@ /* vi: set sw=4 ts=4: * - * killall.c - Send a signal (default: TERM) to all processes with the given names. + * killall.c - Send signal (default: TERM) to all processes with given names. * * Copyright 2012 Andreas Heck <aheck@gmx.de> * * Not in SUSv4. - * See http://opengroup.org/onlinepubs/9699919799/utilities/ -USE_KILLALL(NEWTOY(killall, "?lq", TOYFLAG_USR|TOYFLAG_BIN)) +USE_KILLALL(NEWTOY(killall, "<1?lq", TOYFLAG_USR|TOYFLAG_BIN)) config KILLALL bool "killall" @@ -27,8 +26,8 @@ config KILLALL #define FLAG_l 2 DEFINE_GLOBALS( - int matched; - int signum; + int matched; + int signum; ) #define TT this.killall @@ -149,7 +148,8 @@ static struct signame signames[] = { {0, NULL} }; -static int sig_to_num(const char *pidstr) { +static int sig_to_num(const char *pidstr) +{ int i, num; if (isdigit(pidstr[0])) { @@ -167,7 +167,8 @@ static int sig_to_num(const char *pidstr) { return -1; } -static void print_signals() { +static void print_signals() +{ int i; for (i = 0; signames[i].num; i++) { @@ -175,28 +176,25 @@ static void print_signals() { } } -static void kill_process(const char *pidstr) { +static void kill_process(pid_t pid) +{ int ret; - pid_t pid = atoi(pidstr); TT.matched = 1; ret = kill(pid, TT.signum); - if (ret == -1) { - if (toys.optflags & FLAG_q) perror("kill"); - } + if (ret == -1 && !(toys.optflags & FLAG_q)) perror("kill"); } void killall_main(void) { char **names; - TT.matched = 0; TT.signum = SIGTERM; if (toys.optflags & FLAG_l) { print_signals(); - exit(0); + return; } if (!*toys.optargs) { @@ -206,13 +204,13 @@ void killall_main(void) names = toys.optargs; - if ((*toys.optargs)[0] == '-') { - TT.signum = sig_to_num(&(*toys.optargs)[1]); + if (**names == '-') { + TT.signum = sig_to_num((*names)+1); if (TT.signum <= 0) { - if (toys.optflags & FLAG_q) fprintf(stderr, "Invalid signal\n"); + if (toys.optflags & FLAG_q) error_exit("Invalid signal"); exit(1); } - names = ++toys.optargs; + names++; } if (!*names) { diff --git a/toys/pidof.c b/toys/pidof.c index 329b0084..d8f24be8 100644 --- a/toys/pidof.c +++ b/toys/pidof.c @@ -5,9 +5,8 @@ * Copyright 2012 Andreas Heck <aheck@gmx.de> * * Not in SUSv4. - * See http://opengroup.org/onlinepubs/9699919799/utilities/ -USE_PIDOF(NEWTOY(pidof, "", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIDOF(NEWTOY(pidof, "<1", TOYFLAG_USR|TOYFLAG_BIN)) config PIDOF bool "pidof" @@ -20,31 +19,14 @@ config PIDOF #include "toys.h" -DEFINE_GLOBALS( - int matched; -) -#define TT this.pidof - - -static void print_pid (const char *pid) { - if (TT.matched) putchar(' '); - fputs(pid, stdout); - TT.matched = 1; +static void print_pid(pid_t pid) { + xprintf("%s%ld", toys.exitval ? "" : " ", (long)pid); + toys.exitval = 0; } void pidof_main(void) { - int err; - - TT.matched = 0; - - if (!toys.optargs) exit(1); - - err = for_each_pid_with_name_in(toys.optargs, print_pid); - if (err) exit(1); - - if (!TT.matched) - exit(1); - else - putchar('\n'); + toys.exitval = 1; + for_each_pid_with_name_in(toys.optargs, print_pid); + if (!toys.exitval) xputc('\n'); } |