如何在单独的进程中运行代码?

时间:2013-04-02 07:12:33

标签: ruby process

我正在寻找一个解决方案,在一个单独的进程中生成一个块或Proc中定义的代码。 像

这样的东西
p = Proc.new do
  File.open('newproc.log', 'w') {
    |fw|
    10.times do
      fw.puts Time.now
      sleep 1
    end
  }
end

# spawn p in a separate process here

# original code continues

没有进程分叉,没有线程,没有存储在外部文件中。只需在独立进程中执行该块。

有什么想法吗?

更新 我要添加块不依赖于调用过程中定义的任何内容。

1 个答案:

答案 0 :(得分:2)

在基于Unix的系统上,fork(3)是创建新进程的唯一方法。你必须能够分叉才能完成你所描述的内容。

如果你因为父进程“胖”并且占用大量内存而试图避免分叉,那么你可以通过使用Ruby的一个版本(例如Ruby 2.0)来避免重复内存。实现Copy-on-Write。并且线程比单独的进程使用更少的内存,因此线程当然值得考虑。

修改

使用fork的解决方案可能如下所示:

p = Proc.new do
  File.open('newproc.log', 'w') {
    |fw|
    10.times do
      fw.puts Time.now
      sleep 1
    end
  }
end

# spawn p in a separate process here
fork { p.call }

# original code continues