Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Threading nightmare

Reply
Thread Tools

Threading nightmare

 
 
Thiago Jackiw
Guest
Posts: n/a
 
      01-10-2007
The scenario (for test purposes) I'm trying to accomplish when running
rake on a new Rakefile is:

1) start a java server (which doesn't have an option to 'daemonize'
it) and get its pid
2) interact with the server by sending things or accessing it
3) stop the server

I've tried using IO's popen, fork, thread, even sending the server to
/dev/null when starting it but none of them work as I expected. Once
the server (step 1) starts it just hangs in there, not letting the
following steps to run. But if I kill the server (control+c) the step
2 tries to run and fails because the server is no longer running.

Any ideas how it can be done?

Thanks a lot.

Thiago

 
Reply With Quote
 
 
 
 
Tim Pease
Guest
Posts: n/a
 
      01-10-2007
On 1/10/07, Thiago Jackiw <(E-Mail Removed)> wrote:
> The scenario (for test purposes) I'm trying to accomplish when running
> rake on a new Rakefile is:
>
> 1) start a java server (which doesn't have an option to 'daemonize'
> it) and get its pid
> 2) interact with the server by sending things or accessing it
> 3) stop the server
>
> I've tried using IO's popen, fork, thread, even sending the server to
> /dev/null when starting it but none of them work as I expected. Once
> the server (step 1) starts it just hangs in there, not letting the
> following steps to run. But if I kill the server (control+c) the step
> 2 tries to run and fails because the server is no longer running.
>


If you're on a non-Windows system, then you can use Ara's "slave" gem.

Check out Ara's "systemu" gem as well -- although I do not think it
allows you to send information to the forked process.

Blessings,
TwP

 
Reply With Quote
 
 
 
 
Thiago Jackiw
Guest
Posts: n/a
 
      01-10-2007
Tim,

I'm on a unix box but I'm trying to accomplish this without having to
be system specific. If I have no choice than I'll have to do it only
for *nix systems.

Thiago

On 1/10/07, Tim Pease <(E-Mail Removed)> wrote:
> On 1/10/07, Thiago Jackiw <(E-Mail Removed)> wrote:
> > The scenario (for test purposes) I'm trying to accomplish when running
> > rake on a new Rakefile is:
> >
> > 1) start a java server (which doesn't have an option to 'daemonize'
> > it) and get its pid
> > 2) interact with the server by sending things or accessing it
> > 3) stop the server
> >
> > I've tried using IO's popen, fork, thread, even sending the server to
> > /dev/null when starting it but none of them work as I expected. Once
> > the server (step 1) starts it just hangs in there, not letting the
> > following steps to run. But if I kill the server (control+c) the step
> > 2 tries to run and fails because the server is no longer running.
> >

>
> If you're on a non-Windows system, then you can use Ara's "slave" gem.
>
> Check out Ara's "systemu" gem as well -- although I do not think it
> allows you to send information to the forked process.
>
> Blessings,
> TwP
>
>


 
Reply With Quote
 
Tim Pease
Guest
Posts: n/a
 
      01-11-2007
On 1/10/07, Thiago Jackiw <(E-Mail Removed)> wrote:
> Tim,
>
> I'm on a unix box but I'm trying to accomplish this without having to
> be system specific. If I have no choice than I'll have to do it only
> for *nix systems.
>


Also, check out popen4. There is a Windows version and Unix version.
Both do what you need, but you'll have platform specific code in your
script.

Blessings,
TwP

 
Reply With Quote
 
ara.t.howard@noaa.gov
Guest
Posts: n/a
 
      01-11-2007
On Thu, 11 Jan 2007, Thiago Jackiw wrote:

>> > The scenario (for test purposes) I'm trying to accomplish when running
>> > rake on a new Rakefile is:
>> >
>> > 1) start a java server (which doesn't have an option to 'daemonize'
>> > it) and get its pid
>> > 2) interact with the server by sending things or accessing it
>> > 3) stop the server


you don't have an easy choice. if you want to interact you'll want to be unix
specifc.

how do you want to interact? via stdin/stdout? does the process need to be a
daemon or should it depend on the process controlling it also existing? is
the controlling process transient or permanent?

>> > I've tried using IO's popen, fork, thread, even sending the server to
>> > /dev/null when starting it but none of them work as I expected.


does the server allow itself to run without a tty? some programs don't and
then you'll need to use the ruby pty lib. this would also limit you to unix.

> Once the
>> > server (step 1) starts it just hangs in there, not letting the following
>> > steps to run.


is it waiting for input?

> But if I kill the server (control+c) the step 2 tries to
>> > run and fails because the server is no longer running.


makes sense...


regards.

-a
--
in the practice of tolerance, one's enemy is the best teacher.
- the dalai lama

 
Reply With Quote
 
Thiago Jackiw
Guest
Posts: n/a
 
      01-11-2007
Thanks for the help, but I was able to accomplish it using a
combination of fork, STDERR and exec and it seems to be working fine.

Thiago


On 1/11/07, http://www.velocityreviews.com/forums/(E-Mail Removed) <(E-Mail Removed)> wrote:
> On Thu, 11 Jan 2007, Thiago Jackiw wrote:
>
> >> > The scenario (for test purposes) I'm trying to accomplish when running
> >> > rake on a new Rakefile is:
> >> >
> >> > 1) start a java server (which doesn't have an option to 'daemonize'
> >> > it) and get its pid
> >> > 2) interact with the server by sending things or accessing it
> >> > 3) stop the server

>
> you don't have an easy choice. if you want to interact you'll want to be unix
> specifc.
>
> how do you want to interact? via stdin/stdout? does the process need to be a
> daemon or should it depend on the process controlling it also existing? is
> the controlling process transient or permanent?
>
> >> > I've tried using IO's popen, fork, thread, even sending the server to
> >> > /dev/null when starting it but none of them work as I expected.

>
> does the server allow itself to run without a tty? some programs don't and
> then you'll need to use the ruby pty lib. this would also limit you to unix.
>
> > Once the
> >> > server (step 1) starts it just hangs in there, not letting the following
> >> > steps to run.

>
> is it waiting for input?
>
> > But if I kill the server (control+c) the step 2 tries to
> >> > run and fails because the server is no longer running.

>
> makes sense...
>
>
> regards.
>
> -a
> --
> in the practice of tolerance, one's enemy is the best teacher.
> - the dalai lama
>
>


 
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: threading in PyQt vs threading in standard library Steven Woody Python 0 01-09-2009 07:48 AM
threading in PyQt vs threading in standard library Steven Woody Python 0 01-09-2009 07:15 AM
Cooperative threading preemptive threading - a bit confused failure_to@yahoo.co.uk Java 9 12-29-2007 01:10 AM
My Tkinter Threading nightmare half.italian@gmail.com Python 5 01-25-2007 03:26 PM
Re: Linksys & XP Networking nightmare Jack Wireless Networking 0 07-28-2004 12:48 AM



Advertisments