Ruby 1.9.2中Process.fork和Process.spawn之间的区别是什么

时间:2010-11-08 23:49:54

标签: ruby-on-rails ruby process ruby-1.9

Process.fork和Ruby 1.9.2中的新Process.spawn方法之间有什么区别?哪个更好在子进程中运行另一个程序?据我所知,Process.fork接受代码块,Process.spawn接受系统命令加上一些其他参数。当我应该使用一个而不是另一个?

2 个答案:

答案 0 :(得分:47)

  

Process.fork与Ruby 1.9.2中的新Process.spawn方法有什么区别

Process.fork允许您在另一个进程中运行ruby代码。 Process.spawn允许您在另一个进程中运行另一个程序。基本上Process.spawn就像使用Process.fork,然后在分叉流程中调用exec,除了它为您提供更多选项。

  

哪个更好在子进程中运行另一个程序?

如果您需要向后兼容性,请使用fork + exec,因为spawn在1.8中不可用。否则使用spawn,因为在子流程中运行另一个程序正是spawn的作用。

  

据我所知,Process.fork接受代码块,Process.spawn接受系统命令加上一些其他参数。

完全。

  

什么时候应该使用一个而不是另一个?

如果您需要在单独的进程中运行任意ruby代码,请使用fork(您无法使用spawn执行此操作)。如果需要在子流程中调用应用程序,请使用spawn

答案 1 :(得分:0)

我相信Process.Fork会分叉当前进程,而Process.Spawn会生成一个新进程。他们是完全不同的。您想要新线程还是新流程?