2013-09-30 28 views
0

我試圖在JRuby中實現fork。我正在密碼fork它在內部使用FFI執行分叉呼叫。然後它返回孩子pid。在JRuby上實現叉

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 

這是解決問題的正確方法嗎?

回答

1

雖然這可能看起來像在JRuby下工作,但它將是不可靠的。

您不能分叉JVM,並可靠地在子進程中運行java代碼 - 因此,當進程分叉時,它只會複製在子進程中執行fork的線程,並且可能會將數據結構留在不一致的狀態。

這就是爲什麼fork()沒有在JRuby中實現的原因。