プロセス名でkillしましょを読んで

今日も今日とて,Rubyあれこれのソースを写経しながら,Rubyの勉強をしました.今回のお題は,プロセスをIDでkillするのではなく,名前でkillする,プロセス名でkillしましょというスクリプト
はじめに断っておきますが,このスクリプトを作成した方と環境が違うため,もちろんpsコマンドも違うので,ちゃんと実装は出来ませんでした.けど,コードを読むのは楽しかったです.コードを読んだ中で,気になった事なんかを,今日も徒然と.

popen

ポペン.IOクラスのクラスメソッドの一つです.なんだか,すごい使えそう.

require 'time'

f = fopen("ddouplog.txt","a")
p = IO.popen("wget -q -O -'http://free.ddo.jp/dnsupdate.php?dn=foo&pw=bar'","r")
p.each{ |l|
  if l =~ /success/i || l =~ /fail/i
    print Time.now.strftime("%c??t")
    f.puts l
  end
}
f.close

みたいにすると,ddo.jpのログが取れます.けっこう回りくどい(やりたかっただけ).

select

なんか,今回躓いたところ.この,selectというメソッド,わからない.

name, pid, ppid, command = split(/?s+/, 8).select(0, 1, 2, 7)

読んでると,splitされて生成された配列の,0,1,2,7番目を取り出すのかしら,と思いきや,そうでもなかった.リファレンスを見る以上,そもそもArrayにはselectというメソッドは無く,組み込み関数やIOのメソッドのよう.そこでググった.
ボクは,http://capsctrl.que.jp/kdmsnr/wiki/bliki/?Closureを読んで,selectの使い方を理解できた気がする.クロージャすげぇってなった.なんちゅうか,COOOOL!クラスとか使いだすと,便利なのは間違いないけど,まだボクには使えそうにないです.

sprintf

Cでもsprintfはあるようですが,使った事が無かったので.printfの出力を,Stringオブジェクトに格納するかんじ.

foo = "フラグ"
s = sprint("%sキター!!!",foo) 

で,sに"フラグキター!!!"が格納されます.これまた便利.

さいごに

まぁ今日はこんな感じでした.ちゃんと動くようにして,使ってみたいです.ppidって何だ?