我知道有多种方法可以在Ruby中生成新进程(例如反引号,系统(),exec()等......)
但是,是否可以直接使用作为块传递的代码生成新进程? 就像forks(fork {... block ...})。
我的问题是我不想使用分叉,因为我不想复制所有内存(因为写作而在我的情况下有问题),我想在没有调用外部红宝石的情况下生成一个“新鲜”的项目文件。
答案 0 :(得分: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