thandle interrupts and backgrounded processes a little better. - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 69ab5d3d499b74e9deb46eeaeaf31a6896b92bde (DIR) parent 25e0e4f334bd645f8d97de1ed5a77016797939dc (HTM) 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; } } }