diff --git a/src/signal_handler.c b/src/signal_handler.c
index 60e4ea1866b4a927fc0cffd5a0aa44f5259a3d3e..b25b1d673ccc9efe3ce43dd782fcdaeb50041e9e 100644
--- a/src/signal_handler.c
+++ b/src/signal_handler.c
@@ -23,7 +23,7 @@
 #include "builtin_functions.h"
 #include <signal.h>
 
-RCSID("$Id: signal_handler.c,v 1.91 1998/11/29 21:28:17 grubba Exp $");
+RCSID("$Id: signal_handler.c,v 1.92 1998/11/29 21:55:27 grubba Exp $");
 
 #ifdef HAVE_PASSWD_H
 # include <passwd.h>
@@ -1474,8 +1474,46 @@ void f_create_process(INT32 args)
 	push_int(0);
       } else {
 	/* Something went wrong. */
-	error("Process.create_process(): Child failed: %d, %d, %d!\n",
-	      buf[0], buf[1], buf[2]);
+	switch(buf[0]) {
+	case PROCE_CHDIR:
+	  error("Process.create_process(): chdir() failed. errno:%d\n",
+		buf[1]);
+	  break;
+	case PROCE_DUP2:
+	  error("Process.create_process(): dup2() failed. errno:%d\n",
+		buf[1]);
+	  break;
+	case PROCE_SETGID:
+	  error("Process.create_process(): setgid(%d) failed. errno:%d\n",
+		buf[2], buf[1]);
+	  break;
+	case PROCE_SETGROUPS:
+	  error("Process.create_process(): setgroups() failed. errno:%d\n",
+		buf[1]);
+	  break;
+	case PROCE_GETPWUID:
+	  error("Process.create_process(): getpwuid(%d) failed. errno:%d\n",
+		buf[2], buf[1]);
+	  break;
+	case PROCE_INITGROUPS:
+	  error("Process.create_process(): initgroups() failed. errno:%d\n",
+		buf[1]);
+	  break;
+	case PROCE_SETUID:
+	  error("Process.create_process(): setuid(%d) failed. errno:%d\n",
+		buf[1]);
+	  break;
+	case PROCE_EXEC:
+	  error("Process.create_process(): exec() failed. errno:%d\n"
+		"File not found?\n", buf[1]);
+	  break;
+	case 0:
+	  /* read() probably failed. */
+	default:
+	  error("Process.create_process(): Child failed: %d, %d, %d!\n",
+		buf[0], buf[1], buf[2]);
+	  break;
+	}
       }
     }else{
       ONERROR oe;