Ricardo Kleemann wrote: > > Hi, > > I'm having a hard time getting fork to work correctly in a cgi script. > > Basically I have a time consuming process which I want to be done in the > background. > > I have something like this: > > unless (fork) { > > # print out result html page > exit 0; > } > > else { > > # do time-intensive stuff > } > > What's happening is that the child process executes (and becomes zombie) > and the parent process continues to chug along. The cgi result html only > comes up after the long process finishes... > > I've tried switching the parent & child to see if it makes a difference, > but it doesn't. In every case, the html output goes into zombie state, and > the result page is only displayed after the entire process is complete. > Almost as if the fork isn't working as intended... > > Any ideas? > > Thanks, > Ricardo >
Well, the child is a zombie because the process which called fork did not wait() on the child process. This can be accomplished asynchronously by handling the SIGCHLD signal. The following (somewhat modified to remove unecessary SysV stuff) example comes from the perlipc manpage: sub REAPER { $waitedpid = wait; } $SIG{CHLD} = \&REAPER; # now do something that forks... That code will make sure the child doesn't sit there as a zombie. As for why the result doesn't come up quickly I can't speculate since I don't know what you're doing. -- Jens B. Jorgensen [EMAIL PROTECTED] -- TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to [EMAIL PROTECTED] . Trouble? e-mail to [EMAIL PROTECTED]