If you need alot of communication between process, you might be better off using threads and shared variables. The drawback to threads is that it may retain system resources (gain ram) if not done properly. A neat way to avoid that, is to make a thread to do your forking. You can then detect the status of the forked process( running, finished, returned errors, ets) in the thread, and stuff them in shared variables( with the pid of the forked process), so you can kill it from the main thread whenever you want. You can reuse the launcher thread, and pass in strings to be eval'd and forked off.