プロセス名で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って何だ?