shithub: npe

ref: 2aee89298cbbf5c1b4d50e70733b52ae75c706fd
dir: /libnpe/kill.c/

View raw version
#include <npe.h>
#include <signal.h>

static
char *killnotes[] = {
	[SIGKILL] = "exit",
	[SIGTERM] = "term",
};

static int
note(int pid, char *msg, char *fmt)
{
	int f;
	char pname[50];

	sprintf(pname, fmt, pid);
	f = open(pname, OWRITE);
	if(f < 0){
		return -1;
	}
	if(write(f, msg, strlen(msg)) < 0){
		close(f);
		return -1;
	}
	close(f);
	return 0;
}

int
kill(int pid, int sig)
{
	if(sig < 0 || sig > SIGTERM || killnotes[sig] == nil)
		return -1;
	if(pid == 0)
		return note(getpid(), killnotes[sig], "/proc/%d/notepg");
	return note(pid, killnotes[sig], "/proc/%d/note");
}