What's the difference between Process.fork and Process.spawn in Ruby 1.9.2

process, ruby, ruby-1.9, ruby-on-rails

Solution

What's the difference between Process.fork and the new Process.spawn methods in Ruby 1.9.2

`Process.fork` allows you to run ruby code in another process. `Process.spawn` allows you to run another program in another process. Basically `Process.spawn` is like using `Process.fork` and then calling `exec` in the forked process, except that it gives you more options.

and which one is better to run another program in a subprocess?

If you need backwards compatibility, use `fork` + `exec` as `spawn` is not available in 1.8. Otherwise use `spawn` since running another program in a subprocess is exactly what `spawn` is made for.

As far as I understand Process.fork accepts block of code and Process.spawn takes a system command plus some other parameters.

Exactly.

When I should use one instead of the other?

Use `fork` if you need to run arbitrary ruby code in a separate process (you can't do that with `spawn`). Use `spawn` if you need to invoke an application in a subprocess.

Problem

What's the difference between Process.fork and the new Process.spawn methods in Ruby 1.9.2 and which one is better to run another program in a subprocess? As far as I understand Process.fork accepts block of code and Process.spawn takes a system command plus some other parameters. When I should use one instead of the other?

Original source