Реализация форка на 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.

Другие вопросы по тегам