fork -> Integer | nil
[permalink][rdoc][edit]fork { ... } -> Integer | nil
-
fork(2) システムコールを使ってプロセスの複製を作ります。親プロセスでは子プロセスのプロセスIDを、子プロセスでは nil を返します。ブロックを指定して呼び出した場合には、生成した子プロセスでブロックを評価します。
fork 前に STDOUT と STDERR を IO#flush します。
- [EXCEPTION] NotImplementedError:
- 実行環境がこのメソッドに対応していないとき発生します。
if child_pid = fork puts "parent process. pid: #{Process.pid}, child pid: #{child_pid}" # => parent process. pid: 81060, child pid: 81329 # 親プロセスでの処理 # ... # 子プロセスの終了を待って終了。 Process.waitpid(child_pid) else puts "child process. pid: #{Process.pid}" # => child process. pid: 81329 # 子プロセスでの処理 sleep(1) end
child_pid = fork do puts "child process. pid: #{Process.pid}" # => child process. pid: 79602 # 子プロセスでの処理 sleep(1) end puts "parent process. pid: #{Process.pid}, child pid: #{child_pid}" # => parent process. pid: 79055, child pid: 79602 # 親プロセスでの処理 # ... # 子プロセスの終了を待って終了。 Process.waitpid(child_pid)
[SEE_ALSO] IO.popen,IO.pipe,Kernel.#at_exit,Kernel.#exit!, fork(2)