【发布时间】:2013-06-13 13:20:47
【问题描述】:
我了解在 Ruby 中产生新进程的方法有很多种(例如反引号、system()、exec() 等...)
但是,是否可以使用作为块传递的代码直接生成一个新进程? 就像分叉(fork {... block ...})。
我的问题是我不想使用分叉,因为我不想复制所有内存(在我的情况下因为写作有问题),我想在不调用外部 ruby 的情况下生成一个“新”项目文件。
【问题讨论】:
我了解在 Ruby 中产生新进程的方法有很多种(例如反引号、system()、exec() 等...)
但是,是否可以使用作为块传递的代码直接生成一个新进程? 就像分叉(fork {... block ...})。
我的问题是我不想使用分叉,因为我不想复制所有内存(在我的情况下因为写作有问题),我想在不调用外部 ruby 的情况下生成一个“新”项目文件。
【问题讨论】:
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
【讨论】: