Threading nightmare

T

Thiago Jackiw

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
 
T

Tim Pease

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
 
T

Thiago Jackiw

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
 
T

Tim Pease

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
 
A

ara.t.howard

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?

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.

is it waiting for input?
But if I kill the server (control+c) the step 2 tries to

makes sense...


regards.

-a
 
T

Thiago Jackiw

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top