Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby MRI 1.8.7:直接在代码中生成进程?_Ruby_Fork - Fatal编程技术网

Ruby MRI 1.8.7:直接在代码中生成进程?

Ruby MRI 1.8.7:直接在代码中生成进程?,ruby,fork,Ruby,Fork,我知道在Ruby中产生新进程有多种方法(例如backticks、system()、exec()等) 但是,是否可以直接使用作为块传递的代码生成新进程? 就像forks(fork{…block…}) 我的问题是,我不想使用forks,因为我不想复制所有内存(在我的例子中,由于编写问题),我想在不调用外部ruby文件的情况下生成一个“新”项目。fork是唯一的方法。然而,至少在Linux上,我认为在OSX上,fork实现为写时拷贝,这意味着在子进程中写入内存区域之前,它直接指向旧父进程的区域。所以,

我知道在Ruby中产生新进程有多种方法(例如backticks、system()、exec()等)

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


我的问题是,我不想使用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。