0

我知道有多种方法可以在 Ruby 中生成新进程(例如反引号、system()、exec() 等...)

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

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

4

1 回答 1

1

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

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

code = "puts 'hi'"
result = nil
popen("ruby") do |pipe|
  pipe.puts code
  pipe.close_write
  result = pipe.read
end
于 2013-06-13T13:38:41.173 回答