Re: fork not working?

Colin Steele <[email protected]> Tue, 11 Jan 2005 14:08:08 -0500
Newsgroups gmane.comp.apache.mod-ruby
Message-ID <[email protected]>
Errrr.... yuck is right.  I think I must not have had enough coffee when
I was writing that one up.  Regardless of the poor writeup I did of the
problem, it appears to be a known issue.  Google helped me find this: 
http://i.loveruby.net/d/20040328.html

I tried the script on that page and sure enough, looks like the same
results - the child SEGVs.  :(

As for why I'd like to fork, well, I have a long-running background
process that I need to kick off from a mod_ruby script.  It's not
appropriate as a cron job.  It's also the sort of situation where the
end user doesn't have access to the system on which the process runs, or
isn't savvy enough to be asked to log in and start a background job. 
So... I just wanted to start it from a web page.

--Colin

On Tue, 2005-01-11 at 01:08, Mike Sassak wrote:
> The line "p Process.fork do" does not behave as you expect because do
> has a low precedence. This makes ruby behave as if you had written:
> 
> p(Process.fork) do
>   `touch /tmp/bar`
> end
> 
> which makes a new process without the associated block, when what you meant was:
> 
> p(Process.fork do
>   `touch /tmp/bar`
> end) 
> 
> Yuck and yuck, but the script returns, and you don't see an error
> code. You could use braces instead of do...end or do something like
> 
> id = Process.fork do <code> end
> puts id
> 
> Though having said all that, I must ask why you want to fork a new
> ruby interpreter from within Apache. :)
> 
> -mike
> 
> On Sun, 09 Jan 2005 20:51:29 -0500, Colin Steele <[email protected]> wrote:
> > Hi, all.  I'm running the following mod_ruby script:
> > 
> > p Apache.server_version
> > p ENV["MOD_RUBY"]
> > 
> > `touch /tmp/foo`
> > 
> > p Process.fork do
> >   `touch /tmp/bar`
> > end
> > 
> > sleep 10
> > puts `ls -l /tmp/foo`
> > puts `ls -l /tmp/bar`
> > exit
> > 
> > Which produces the following output in my browser:
> > 
> > "Apache/2.0.51 (Fedora)"
> > "mod_ruby/1.2.4"
> > 4474
> > -rw-r--r--  1 apache apache 0 Jan  9 20:44 /tmp/foo
> > 
> > So I'm left wondering, where'd my forked child with pid 4474 go?  What's it doing?  How come it didn't touch /tmp/bar?
> > 
> > Is this a bug or a feature?  I grepped around in the mod_ruby source and couldn't find anything obviously related to Process.fork... any help would be greatly appreciated.
> > 
> > --Colin Steele
> > [email protected]
> > 
> >
>