0

我正在尝试forkJRuby. 我是猴子补丁fork,它在内部使用 FFI 来执行分叉调用。然后它返回子 pid。

require 'ffi'
module Exec
  extend FFI::Library
  ffi_lib FFI::Library::LIBC
  attach_function :fork, [], :int
end

def fork
  pid = Exec.fork
  if pid == 0
    yield if block_given?
    return nil
  else
    return pid
  end
end

这是解决问题的正确方法吗?

4

1 回答 1

1

虽然这看起来像是在 JRuby 下工作,但它是不可靠的。

您不能 fork JVM 并在子进程中可靠地运行 java(以及因此 ruby​​)代码 - 当进程 fork 时,它只会复制在子进程中执行 fork 的线程,并且可能会使数据结构处于不一致状态。

这就是为什么 JRuby 本身没有实现 fork() 的原因。

于 2013-10-03T01:04:36.550 回答