diff --git a/src/signal_handler.c b/src/signal_handler.c
index d9abda47430974dc26b4defd31bb35ce30d92a4a..247205c700a0103b5a0f2bfd095aa875da522d81 100644
--- a/src/signal_handler.c
+++ b/src/signal_handler.c
@@ -22,7 +22,7 @@
 #include "builtin_functions.h"
 #include <signal.h>
 
-RCSID("$Id: signal_handler.c,v 1.46 1998/04/12 21:25:04 grubba Exp $");
+RCSID("$Id: signal_handler.c,v 1.47 1998/04/18 06:30:21 hubbe Exp $");
 
 #ifdef HAVE_PASSWD_H
 # include <passwd.h>
@@ -1147,6 +1147,7 @@ void f_create_process(INT32 args)
 	for(fd=0;fd<3;fd++)
 	{
 	  struct pike_string *fdname;
+	  toclose[fd]=-1;
 	  switch(fd)
 	  {
 	    case 0: fdname=storage.stdin_s; break;
@@ -1160,7 +1161,12 @@ void f_create_process(INT32 args)
 	    {
 	      INT32 f=fd_from_object(tmp->u.object);
 	      if(f != -1 && fd!=f)
-		dup2(toclose[fd]=f, fd);
+	      {
+		if(dup2(toclose[fd]=f, fd) < 0)
+		{
+		  exit(67);
+		}
+	      }
 	    }
 	  }
 	}
@@ -1175,7 +1181,9 @@ void f_create_process(INT32 args)
 	      break;
 
 	  if(f2 == fd)
+	  {
 	    close(toclose[fd]);
+	  }
 	}
 
 	/* Left to do: cleanup? */