fork(2)して子プロセスを作成できるお。
実行中のプロセスをコピーして新しいプロセスを作成できるのだ。
子プロセスは親プロセスのメモリのコピーであるため、
親プロセスが開いているファイルディスクリプタも同様に引き継ぐ。
というか、同じプロセスを参照しているのだ。
子プロセスのびっくりする例
if fork puts "entered the if block" else puts "entered the else block" end
これ実行したらこうなるのよ。
$ ruby argv.rb entered the if block entered the else block
なぜかというと、1回forkメソッドを使うと2回返ってくるからである。
forkメソッドは新しいプロセスを作るメソッドなので、
オリジナルのプロセスと新しいプロセスの両方に返り値を持つ。
puts "parents process pid is #{Process.pid}" if fork puts "entered the if block from #{Process.pid}" else puts "entered the else block from #{Process.pid}" end
parents process pid is 44626 entered the if block from 44626 entered the else block from 44646
子プロセス側ではforkはnilを返すので、2度目の返り値を判定してelse文を通る形となる。