# Threading nightmare

**URL:** <https://www.ruby-forum.com/t/threading-nightmare/81651>\
**Category:** Ruby\
**Created:** [January 10, 2007, 11:52pm UTC](https://www.ruby-forum.com/t/threading-nightmare/81651 "2007-01-10T23:52:53Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Thiago\_J](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/58956e/32.png) [@Thiago\_J](https://www.ruby-forum.com/u/Thiago_J)\
**Post date:** [January 10, 2007, 11:52pm UTC](https://www.ruby-forum.com/t/threading-nightmare/81651/1 "2007-01-10T23:52:53Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Thiago\_J](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/58956e/32.png) [@Thiago\_J](https://www.ruby-forum.com/u/Thiago_J)\
**Post date:** [January 11, 2007, 12:09am UTC](https://www.ruby-forum.com/t/threading-nightmare/81651/2 "2007-01-11T00:09:57Z")

</div>

On 1/10/07, Thiago J. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 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

---

<div class="post-metadata">

**Author:** ![Thiago\_J](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/58956e/32.png) [@Thiago\_J](https://www.ruby-forum.com/u/Thiago_J)\
**Post date:** [January 11, 2007, 12:23am UTC](https://www.ruby-forum.com/t/threading-nightmare/81651/3 "2007-01-11T00:23:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Thiago\_J](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/58956e/32.png) [@Thiago\_J](https://www.ruby-forum.com/u/Thiago_J)\
**Post date:** [January 11, 2007, 1:08am UTC](https://www.ruby-forum.com/t/threading-nightmare/81651/4 "2007-01-11T01:08:08Z")

</div>

On 1/10/07, Thiago J. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![Thiago\_J](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/58956e/32.png) [@Thiago\_J](https://www.ruby-forum.com/u/Thiago_J)\
**Post date:** [September 25, 2007, 10:44pm UTC](https://www.ruby-forum.com/t/threading-nightmare/81651/5 "2007-09-25T22:44:54Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Thiago\_J](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/58956e/32.png) [@Thiago\_J](https://www.ruby-forum.com/u/Thiago_J)\
**Post date:** [January 19, 2007, 4:31pm UTC](https://www.ruby-forum.com/t/threading-nightmare/81651/6 "2007-01-19T16:31:31Z")

</div>

On Thu, 11 Jan 2007, Thiago J. 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
