Реализация форка на JRuby
Я пытаюсь реализовать fork
в JRuby
, Я занимаюсь обезьяной 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
Это правильный способ решения проблемы?
1 ответ
Хотя может показаться, что он работает под JRuby, он будет ненадежным.
Вы не можете разветвлять JVM и надежно запускать код java (и, следовательно, ruby) в дочернем элементе - когда процесс разветвляется, он только дублирует поток, выполняющий разветвление в дочернем элементе, и может оставить структуры данных в несогласованном состоянии.
Вот почему fork() не реализована в самом JRuby.