#!/usr/bin/perl use warnings; use strict; #Benjamin Goldberg #The Apache process does NOT wait for the CGI process to exit, it waits #for the pipes to be closed. (Note that if the CGI is a NPH script, then #it does waitpid() for the script to exit). #Thus, you do not really need a child process -- you can have your CGI #process transmute itself into whatever you would have the child process #do, by doing something like: $| = 1; # need either this or to explicitly flush stdout, etc. print "Content-type: text/plain\n\n"; print "Going to start the fork now\n"; open( STDIN, ">/dev/null"); open( STDERR, ">>/path/to/logfile"); fork and exit; exec "program that would be the child process"; #Apache waits for all children to close the pipes to apache. It #does not wait for them to actually exit -- think ... how in the world #could it *possibly* know that those processes were really spawned from #the CGI process? Answer: It can't. It can only know that *something* #still has an open filedescriptor which points to one of the pipes that #apache created to capture the CGI's stdout and stderr. As long as one #of these pipes is open, then apache waits.