【问题标题】:Ruby MRI 1.8.7: Spawn process directly in code?Ruby MRI 1.8.7:直接在代码中生成进程?
【发布时间】:2013-06-13 13:20:47
【问题描述】:

我了解在 Ruby 中产生新进程的方法有很多种(例如反引号、system()、exec() 等...)

但是,是否可以使用作为块传递的代码直接生成一个新进程? 就像分叉(fork {... block ...})。

我的问题是我不想使用分叉,因为我不想复制所有内存(在我的情况下因为写作有问题),我想在不调用外部 ruby​​ 的情况下生成一个“新”项目文件。

【问题讨论】:

    标签: ruby fork


    【解决方案1】:

    fork 是这样做的唯一方法。但是,至少在 Linux 上,我也认为在 OSX 上,fork 被实现为 copy on write,这意味着在子进程中写入内存区域之前,它直接指向旧父进程的区域。所以,没问题。

    编辑:没关系。以上是错误的。这是我要做的:

    code = "puts 'hi'"
    result = nil
    popen("ruby") do |pipe|
      pipe.puts code
      pipe.close_write
      result = pipe.read
    end
    

    【讨论】:

    • 不幸的是,在 Ruby 1.8.7 中,由于使用了标记和清除算法,所有内存都必须在垃圾收集器第一次运行时被复制。有关详细信息,请参阅patshaughnessy.net/2012/3/23/…
    • @wally:哦!标题中没看到 1.8。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多