4

我正在寻找一种解决方案来生成在单独进程中的块或 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

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

任何想法 ?

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

4

1 回答 1

3

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

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

编辑

使用的解决方案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
于 2013-04-02T07:25:08.303 回答