rubyとforkと変数…大域変数が作れない
rubyはcygwin上でもforkが平気で出来るまれな言語。
$ ruby -e 'fork{puts "child"}; puts "parent"' parent child $ ruby -e 'fork{puts "child"}; Process.wait; puts "parent"' child parent
きちんとwaitも実装されている。
$ ruby -e 'fork{puts "1"};fork{puts "2"};fork{puts "3"};puts "0"' 1 2 0 3 $ ruby -e 'fork{puts "1"};fork{puts "2"};fork{puts "3"};Process.wait;puts "0"' 1 2 0 3 $ ruby -e 'fork{puts "1"};fork{puts "2"};fork{puts "3"};Process.waitall;puts "0"' 1 2 3 0
waitallもある。ブロックのようにforkできるのはおもしろい。
ところが大域変数がうまく作れない。
$ ruby -e 'a=2;fork{a+=2;puts "child:"+a.to_s}; Process.wait; puts "parent:"+a.to_s' child:4 parent:2
どうする?