in reply to fork problem
#!/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( STDOUT, ">>/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.
|
|---|