コマンドの実行コストはrubyより重いかもしれない。

何かのアプリケーションを実行しているときに、そのアプリケーションのプロセス番号を調べるようなことがしたかった。
rubyプロセス番号を抽出するときに、ruby上でした方がいいのかコマンドのgrepでした方がいいのか分からなかった。なので調べてみた。(元のコードでは見つけたプロセス番号をputsで表示していたのですが、ベンチマークを取るときにはプロセス番号を返すようにしました><)

#linuxのコマンドを使った方
def f(process="xmms")
  return("kill #{$& if `ps -A | grep #{process}` =~ /\d+/}")
end

#rubyの正規表現を使った方
def g(process="xmms")
  `ps -A`.each_line do |e|
    if e=~/(\d+).+#{process}/
        return("kill #{$1}")
    end
  end
end
#条件に当てはまる文を見つけたら、止めてしまうのは仕様です。
#(たぶん、その方が使い易いと思う)

require 'benchmark'
Benchmark.bmbm do |x|
  n=100
  x.report("f"){n.times{f}}
  x.report("g"){n.times{g}}
end