Joel VanderWerf
3/8/2006 11:05:00 PM
Robert Klemme wrote:
> 2006/3/8, Marcus Andersson <m-lists@bristav.se>:
>> I have a long running process that I want to start from a Rails request.
>> But, because it takes so long to execute, I want to start it in a
>> separate process and then return. What is the best way to do that?
>
> You have several options - at leas these:
>
> - do it in a thread
>
> - create a new process using fork's block form, which executes the
> block in the child
>
> - create a completely new process via a standard fork call
>
> Which one is best depends on the problem you are trying to solve, # of
> CPU's available, personal taste etc.
Portably, the following works, as long as you don't mind not having
access to its stdin/out:
t = Thread.new { system "something" }
You can use t.value to wait for the process to finish and determine the
result code of the system call (true or false).
If you want to read/write to the process look into the various pipe
openers: Kernel#open("|something"), Open3, etc.
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407