ref: 2aee89298cbbf5c1b4d50e70733b52ae75c706fd
dir: /libnpe/kill.c/
#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");
}