Joost Diepenmaat
5/9/2005 9:17:00 AM
On Sun, May 08, 2005 at 07:44:51AM +0900, Francis Hwang wrote:
> Hey all,
>
> There's probably a very easy answer to my question, but I've never been
> very good with managing process and haven't been able to find this
> addressed directly in the archives. So: I'm trying to have a CGI script
> that will publish a ton of different XML files. The publishing process
> is pretty long, maybe it will run 10 or 15 minutes, but it's not
> complicated, and the user doesn't need any feedback, they just need a
> message that says "we started the process; it should be done in a few
> minutes."
>
> I tried running code that looks like this:
>
> is_parent = fork
> system '/some/external/script.rb' unless is_parent
> print "Location: /admin_page\n"
>
> And this works on the command-line. It prints the location line right
> away and then ends quickly, leaving the external script to run in the
> background until it finishes of its own accord.
>
> But the same script doesn't work in Apache ... it runs the external
> script, but hangs and doesn't exit. I guess Apache is treating the
> spawning of external processes differently. Anybody have experience
> with this? Is there some really obvious solution I'm missing?
>
You should probably close the $stdout (and possibly $stdin and $stderr)
streams in the child process, otherwise apache will think there is still
more output coming.
cheers,
Joost Diepenmaat.