/* 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>
 *
 * Not in SUSv4.

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
*/

#include "toys.h"

#define FLAG_q	1
#define FLAG_l	2

DEFINE_GLOBALS(
	int signum;
)
#define TT this.killall

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");
}
