[busybox][patch] httpd.c - CGI scripts can't fork

Jon Nalley jnalley-lists at nalleynet.com
Sun May 16 07:34:22 UTC 2004

I ran into some problems calling a CGI that forks.  Here is the issue:

Because of the signal(SIGCHLD, SIG_IGN) in openServer() the forked CGI
process is unable to catch SIGCHLD and reap it's own children (and get
their exit status).  I added signal(SIGCHLD, SIG_DFL); just before the
execv() in sendCgi() and this fixed it.

I don't believe the waitpid() in sendCgi() ever gets called though... 
Perhaps it would be better to add the signal(SIGCHLD, SIG_DFL); just
before the fork() in sendCgi()?

--- httpd.c.orig        Sun May 16 02:20:37 2004
+++ httpd.c     Sun May 16 02:30:00 2004
@@ -1169,6 +1169,7 @@
                  // now run the program.  If it fails,
                  // use _exit() so no destructors
                  // get called and make a mess.
+                 signal(SIGCHLD, SIG_DFL);
                  execv(realpath_buff, argp);

Jon Nalley

More information about the busybox mailing list