Subject: ‘system*’ may leave dangling processes

From: [email-masked] (Ludovic Courtès)
Date: Thu, 13 Dec 2012 00:14:32 +0100

When running this:

  (false-if-exception (system* "does-not-exist"))

a process is left behind.

One possible solution is to make sure the child exits:

diff --git a/libguile/simpos.c b/libguile/simpos.c
index 5c8fe96..2e340e2 100644
--- a/libguile/simpos.c
+++ b/libguile/simpos.c
@@ -138,9 +138,7 @@ SCM_DEFINE (scm_system_star, "system*", 0, 0, 1,
         {
           /* child */
           execvp (execargv[0], execargv);
-          SCM_SYSERROR;
-          /* not reached.  */
-          return SCM_BOOL_F;
+	  _exit (127);
         }
       else
         {

We’d still need to print ‘strerror (errno)’ in the child, though.

Thoughts?

Ludo’.