2013-09-30 3 views
0

JRuby에 구현하려고합니다. 나는 내부적으로 FFI를 사용하여 fork 호출을 수행하는 monkeypatching fork입니다. 그런 다음 자식 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에서 Java 코드 (따라서 Ruby 코드)를 안정적으로 실행할 수 없습니다. 프로세스가 fork하면 자식 프로세스에서 fork를 실행하는 스레드 만 복제되고 일관성없는 상태.

왜 fork()가 JRuby 자체에 구현되지 않은 것입니까?