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;
                                }
                        }
                }