このマニュアルは既にメンテナンスが終了したバージョンの Ruby を対象としています。 最新版のマニュアルへ

Ruby 3.1 リファレンスマニュアル

singleton method Process._fork

_fork -> IntegerRuby 3.1 から[permalink][rdoc][edit]

fork のための内部 API です。このメソッドを直接呼び出してはいけません。

Kernel.#forkProcess.forkIO.popen に "-" を渡した場合に、その内部から呼び出されます。

通常のプログラムのためではなく、アプリケーションを監視するライブラリのために用意されています。このメソッドを上書きすると、fork の前後に独自の処理を挟めます。

Process.#daemon も fork(2) を用いて実装されることがありますが、そちらはこのメソッドを経由しません。fork を捕捉する目的によっては、 Process.#daemon も併せて上書きする必要があります。

[RETURN]
子プロセスでは 0 を、親プロセスでは生成した子プロセスのプロセス ID を返します。
module ForkMonitor
  def _fork
    pid = super
    if pid.zero?
      puts "子プロセスです"
    else
      puts "親プロセスです。子は #{pid} です"
    end
    pid
  end
end
Process.singleton_class.prepend(ForkMonitor)

pid = fork { exit }
Process.waitpid(pid)
# => 子プロセスです
#    親プロセスです。子は 70024 です

[SEE_ALSO] Process.fork, Kernel.#fork, Process.#daemon