Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > system waiting for launched process AND forked processes

Reply
Thread Tools

system waiting for launched process AND forked processes

 
 
Pierre Morel
Guest
Posts: n/a
 
      02-17-2010
Hello,

We have written a small client-server program in c/socket. To launch the
server, we call the program which internally fork. The original process
returns immediately but the forked process stays alive and listen to
incoming socket connection.
It's all fine when running this from bash (we're on ubuntu) but when
using ruby (with either system, backtick or #x) it's blocking until both
the original process and the forked process terminate.

Is it what we should expect when calling system? If yes, how could we
work around that?

Thanks
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Roger Pack
Guest
Posts: n/a
 
      02-17-2010

> It's all fine when running this from bash (we're on ubuntu) but when
> using ruby (with either system, backtick or #x) it's blocking until both
> the original process and the forked process terminate.
>
> Is it what we should expect when calling system? If yes, how could we
> work around that?


Mine doesn't seem to do that.

rdp@li49-39:~$ cat spawn.rb
Process.fork {
puts 'in daemon'
puts Process.pid
sleep
}
puts 'terminating'

rdp@li49-39:~$ cat spawn2.rb
system("~/installs/ruby_trunk_installed/bin/ruby spawn.rb")
puts 'done'

rdp@li49-39:~$ ruby -v spawn2.rb
ruby 1.8.6 (2009-3-4 mbari 8B/0x8770 on patchlevel 287) [i686-linux]
terminating
done
in daemon
3199
rdp@li49-39:~$ ps -ef | grep 3199
rdp 3199 1 0 17:41 pts/0 00:00:00
/home/rdp/installs/ruby_trunk_installed/bin/ruby spawn.rb
rdp 3272 477 0 17:41 pts/0 00:00:00 grep 3199


(3199 is still alive).

Perhaps your other process.wait'ing on the first or something?

One thing that might help (in 1.9)
Process.daemon {
# something
}

or

Process.fork {
Thread.new { system("long running command")}
}

or what not.

GL.
-rp
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Robert Klemme
Guest
Posts: n/a
 
      02-17-2010
On 02/17/2010 06:22 PM, Pierre Morel wrote:

> We have written a small client-server program in c/socket. To launch the
> server, we call the program which internally fork. The original process
> returns immediately but the forked process stays alive and listen to
> incoming socket connection.
> It's all fine when running this from bash (we're on ubuntu) but when
> using ruby (with either system, backtick or #x) it's blocking until both
> the original process and the forked process terminate.
>
> Is it what we should expect when calling system? If yes, how could we
> work around that?


Hmmm, might be that you have an issue because your child's child is
attached to your ruby process once the starter process stops. There is
a whole range of other possible issues causing this which is hard to
sort out given the little information we have. Did you take proper
measures to demonize your child process after fork?

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      02-17-2010
On 02/17/2010 06:42 PM, Roger Pack wrote:

> Process.fork {
> Thread.new { system("long running command")}
> }


What do you create the thread for? Also exec is probably a better
choice in this case.

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/
 
Reply With Quote
 
Roger Pack
Guest
Posts: n/a
 
      02-17-2010

>> Process.fork {
>> Thread.new { system("long running command")}
>> }

>
> What do you create the thread for? Also exec is probably a better
> choice in this case.


ahh yes exec would work well.
-r
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Pierre Morel
Guest
Posts: n/a
 
      02-17-2010
Robert Klemme wrote:
>
> Hmmm, might be that you have an issue because your child's child is
> attached to your ruby process once the starter process stops. There is
> a whole range of other possible issues causing this which is hard to
> sort out given the little information we have. Did you take proper
> measures to demonize your child process after fork?
>
> Kind regards
>
> robert


I didn't take any measure to daemonize the child... Now I have done it
(a call to setsid and few other things, I used the example at
http://www-theorie.physik.unizh.ch/~...owto/daemonize) and it's
working perfectly.

My mistake was assume that it would work from ruby if it was working
fine from the shell or even from another C++ program.

Thank you very much for your quick response.

Pierre
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: forked processes and testing Kushal Kumaran Python 0 09-12-2012 11:31 AM
forked processes and testing andrea crotti Python 0 09-12-2012 10:20 AM
having problems with open4 and stuck forked processes Tim Uckun Ruby 12 10-14-2010 12:12 PM
waiting on recurively forked children bernd.web@gmail.com Perl Misc 2 11-25-2007 12:14 AM
Win32::Process - Limiting the number of processes launched from within a script Patrick Paquet Perl Misc 3 01-29-2004 10:11 AM



Advertisments