Mercurial > hg > toybox
view toys/lsb/killall.c @ 674:7e846e281e38
New build infrastructure to generate FLAG_ macros and TT alias, #define FOR_commandname before #including toys.h to trigger it. Rename DEFINE_GLOBALS() to just GLOBALS() (because I could never remember if it was DECLARE_GLOBALS). Convert existing commands to use new infrastructure, and replace optflag constants with FLAG_ macros where appropriate.
author | Rob Landley <rob@landley.net> |
---|---|
date | Mon, 08 Oct 2012 00:02:30 -0500 |
parents | 6df4ccc0acbe |
children | 786841fdb1e0 |
line wrap: on
line source
/* vi: set sw=4 ts=4: * * killall.c - Send signal (default: TERM) to all processes with given names. * * Copyright 2012 Andreas Heck <aheck@gmx.de> * * http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/killall.html USE_KILLALL(NEWTOY(killall, "<1?lq", TOYFLAG_USR|TOYFLAG_BIN)) config KILLALL bool "killall" default y help usage: killall [-l] [-q] [-SIG] PROCESS_NAME... Send a signal (default: TERM) to all processes with the given names. -l print list of all available signals -q don't print any warnings or error messages */ #define FOR_killall #include "toys.h" GLOBALS( int signum; ) static void kill_process(pid_t pid) { int ret; toys.exitval = 0; ret = kill(pid, TT.signum); if (ret == -1 && !(toys.optflags & FLAG_q)) perror("kill"); } void killall_main(void) { char **names; if (toys.optflags & FLAG_l) { sig_to_num(NULL); return; } TT.signum = SIGTERM; toys.exitval++; if (!*toys.optargs) { toys.exithelp = 1; error_exit("Process name missing!"); } names = toys.optargs; if (**names == '-') { if (0 > (TT.signum = sig_to_num((*names)+1))) { if (toys.optflags & FLAG_q) exit(1); error_exit("Invalid signal"); } names++; if (!*names) { toys.exithelp++; error_exit("Process name missing!"); } } for_each_pid_with_name_in(names, kill_process); if (toys.exitval && !(toys.optflags & FLAG_q)) error_exit("No such process"); }