From e5888a1ffdae813d7575f5fb02275c6bb07e5199 Mon Sep 17 00:00:00 2001 From: Taru Karttunen Date: Wed, 30 Mar 2011 15:46:40 +0300 Subject: Import sources from 2011-03-30 iso image --- sys/src/ape/lib/ap/plan9/kill.c | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 sys/src/ape/lib/ap/plan9/kill.c (limited to 'sys/src/ape/lib/ap/plan9/kill.c') diff --git a/sys/src/ape/lib/ap/plan9/kill.c b/sys/src/ape/lib/ap/plan9/kill.c new file mode 100755 index 000000000..95bbbdcc7 --- /dev/null +++ b/sys/src/ape/lib/ap/plan9/kill.c @@ -0,0 +1,60 @@ +#include "lib.h" +#include +#include +#include +#include +#include +#include + +static int +note(int pid, char *msg, char *fmt) +{ + int f; + char pname[50]; + + sprintf(pname, fmt, pid); + f = open(pname, O_WRONLY); + if(f < 0){ + errno = ESRCH; + return -1; + } + if(msg != 0 && write(f, msg, strlen(msg)) < 0){ + close(f); + errno = EPERM; + return -1; + } + close(f); + return 0; +} + +int +kill(pid_t pid, int sig) +{ + char *msg; + int sid, r, mpid; + + if(sig == 0) + msg = 0; + else { + msg = _sigstring(sig); + if(msg == 0) { + errno = EINVAL; + return -1; + } + } + + if(pid < 0) { + sid = getpgrp(); + mpid = getpid(); + if(setpgid(mpid, -pid) == 0) { + r = note(mpid, msg, "/proc/%d/notepg"); + setpgid(mpid, sid); + } else { + r = -1; + } + } else if(pid == 0) + r = note(getpid(), msg, "/proc/%d/notepg"); + else + r = note(pid, msg, "/proc/%d/note"); + return r; +} -- cgit v1.2.3