diff -urp src.org/rc/runscript.c src/rc/runscript.c --- src.org/rc/runscript.c 2010-11-21 18:08:53.000000000 +0100 +++ src/rc/runscript.c 2010-12-02 11:00:29.000000000 +0100 @@ -350,6 +350,8 @@ svc_exec(const char *arg1, const char *a size_t bytes; bool prefixed = false; int slave_tty; + sigset_t sigchldmask; + sigset_t oldmask; /* Setup our signal pipe */ if (pipe(signal_pipe) == -1) @@ -439,10 +441,17 @@ svc_exec(const char *arg1, const char *a } free(buffer); + + sigemptyset (&sigchldmask); + sigaddset (&sigchldmask, SIGCHLD); + sigprocmask (SIG_BLOCK, &sigchldmask, &oldmask); + close(signal_pipe[0]); close(signal_pipe[1]); signal_pipe[0] = signal_pipe[1] = -1; + sigprocmask (SIG_SETMASK, &oldmask, NULL); + if (master_tty >= 0) { /* Why did we do this? */ /* signal (SIGWINCH, SIG_IGN); */