# Inter process communication

**URL:** <https://www.ruby-forum.com/t/inter-process-communication/146374>\
**Category:** Ruby\
**Created:** [August 20, 2008, 12:41pm UTC](https://www.ruby-forum.com/t/inter-process-communication/146374 "2008-08-20T12:41:20Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![jazcyk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e56c9b/32.png) [@jazcyk](https://www.ruby-forum.com/u/jazcyk)\
**Post date:** [August 20, 2008, 12:41pm UTC](https://www.ruby-forum.com/t/inter-process-communication/146374/1 "2008-08-20T12:41:20Z")

</div>

Hi,

please advise on the following.

Need to implement execution of tasks in serial and parallel mode  
together with daemons within Ruby.

Scenario:  
The main program starts with a fork - it executes in the child process  
some background programs in the strict sequence - need to leave this  
child process running as a daemon.  
When the last program announces that it finished init stage, it writes a  
notice to the stdout (I cannot modify this notice but I know what is  
it);

- how to advise the parent that all is ready?

I use Program.detach to continue in the main - all is OK but I don’t  
know when the last daemon finishes init and wrote that notice (use of  
sleep works but is ugly)

When the parent knows all is ready, it should start launching new set of  
tasks in serial or parallel mode.

I execute serial tasks in a separate thread and all works OK.

How can the parent know if parallel tasks finished?  
Do I need semaphores/mutexes etc to organise this?

Many thanks  
Peter

---

<div class="post-metadata">

**Author:** ![jazcyk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e56c9b/32.png) [@jazcyk](https://www.ruby-forum.com/u/jazcyk)\
**Post date:** [August 20, 2008, 1:36pm UTC](https://www.ruby-forum.com/t/inter-process-communication/146374/2 "2008-08-20T13:36:22Z")

</div>

Peter Lom wrote:

> child process running as a daemon.  
> When the parent knows all is ready, it should start launching new set of  
> tasks in serial or parallel mode.
> 
> I execute serial tasks in a separate thread and all works OK.
> 
> How can the parent know if parallel tasks finished?  
> Do I need semaphores/mutexes etc to organise this?
> 
> Many thanks  
> Peter

You have a few options.

You can use popen to run the daemon script, which will puts a message  
that the parent program will gets. The popen method uses fork/exec  
internally, so it will be in a separate process.

You can fork another process and use UNIX signals to signal the parent  
it’s ready. I’m not sure if Ruby can use the pause syscall and it will  
probably only work on \*nix.

Run the commands and then fork into parent program and daemon. This  
means you won’t need another mechanism to notify the parent the commands  
have been run at all.
