thandle interrupts and backgrounded processes a little better. - plan9port - [fork] Plan 9 from user space
HTML git clone git://src.adamsgaard.dk/plan9port
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
DIR commit 69ab5d3d499b74e9deb46eeaeaf31a6896b92bde
DIR parent 25e0e4f334bd645f8d97de1ed5a77016797939dc
HTML Author: rsc <devnull@localhost>
Date: Fri, 26 Mar 2004 17:30:36 +0000
handle interrupts and backgrounded processes a little better.
Diffstat:
M src/cmd/rc/plan9ish.c | 8 +++++++-
M src/cmd/rc/rc.h | 1 +
M src/cmd/rc/simple.c | 3 +++
3 files changed, 11 insertions(+), 1 deletion(-)
---
DIR diff --git a/src/cmd/rc/plan9ish.c b/src/cmd/rc/plan9ish.c
t@@ -386,7 +386,13 @@ notifyf(void *unused0, char *s)
int i;
for(i=0;syssigname[i];i++)
if(strncmp(s, syssigname[i], strlen(syssigname[i]))==0){
- if(strncmp(s, "sys: ", 5)!=0) interrupted=1;
+ if(strncmp(s, "sys: ", 5)!=0){
+ if(kidpid && !interrupted){
+ interrupted=1;
+ postnote(PNGROUP, kidpid, s);
+ }
+ interrupted = 1;
+ }
goto Out;
}
if(strcmp(s, "sys: child") != 0)
DIR diff --git a/src/cmd/rc/rc.h b/src/cmd/rc/rc.h
t@@ -137,3 +137,4 @@ int ndot;
char *getstatus(void);
int lastc;
int lastword;
+int kidpid;
DIR diff --git a/src/cmd/rc/simple.c b/src/cmd/rc/simple.c
t@@ -63,6 +63,7 @@ void Xsimple(void){
Xerror("try again");
return;
case 0:
+ rfork(RFNOTEG);
pushword("exec");
execexec();
strcpy(buf, "can't exec: ");
t@@ -70,10 +71,12 @@ void Xsimple(void){
errstr(buf+n, ERRMAX-n);
Exit(buf);
default:
+ kidpid = pid;
poplist();
/* interrupts don't get us out */
while(Waitfor(pid, 1) < 0)
;
+ kidpid = 0;
}
}
}