Ruby MRI 1.8.7:直接在代码中生成进程?
我知道在Ruby中产生新进程有多种方法(例如backticks、system()、exec()等) 但是,是否可以直接使用作为块传递的代码生成新进程? 就像forks(fork{…block…})Ruby MRI 1.8.7:直接在代码中生成进程?,ruby,fork,Ruby,Fork,我知道在Ruby中产生新进程有多种方法(例如backticks、system()、exec()等) 但是,是否可以直接使用作为块传递的代码生成新进程? 就像forks(fork{…block…}) 我的问题是,我不想使用forks,因为我不想复制所有内存(在我的例子中,由于编写问题),我想在不调用外部ruby文件的情况下生成一个“新”项目。fork是唯一的方法。然而,至少在Linux上,我认为在OSX上,fork实现为写时拷贝,这意味着在子进程中写入内存区域之前,它直接指向旧父进程的区域。所以,
我的问题是,我不想使用forks,因为我不想复制所有内存(在我的例子中,由于编写问题),我想在不调用外部ruby文件的情况下生成一个“新”项目。
fork
是唯一的方法。然而,至少在Linux上,我认为在OSX上,fork
实现为写时拷贝,这意味着在子进程中写入内存区域之前,它直接指向旧父进程的区域。所以,没问题
编辑:不必担心。以上是错误的。下面是我要做的:
code = "puts 'hi'"
result = nil
popen("ruby") do |pipe|
pipe.puts code
pipe.close_write
result = pipe.read
end
不幸的是,在Ruby 1.8.7中,由于使用了标记和扫描算法,在垃圾收集器第一次运行时必须复制所有内存。有关更多信息,请参阅@wally:oh!没有看到标题中的1.8。