Linux(RHEL4)において、Ruby(1.8.1)スクリプトから

バックグラウンドで実行した処理が終了したことを
検知する方法はありますでしょうか?

現在は、以下のように1秒毎にプロセスをチェックして
その個数を数えることで検知していますが、
毎秒確認するのもなんとなく効率が悪い気がしたので、
質問させていただきました。

#! /usr/bin/ruby -w

def main
 system("vmstat 1 10 > /dev/null &")
 loop {
  sleep 1
  process_count = `pgrep vmstat | wc -l`.chomp.to_i
  if process_count == 0 then
   puts "vmstat finished"
   break
  end
 }
end

main

__END__

Ruby初心者なので、実装例などあればとてもうれしいです。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/01/24 09:38:53
  • 終了:2008/01/25 16:23:27

回答(1件)

id:tmasao No.1

tmasao回答回数76ベストアンサー獲得回数202008/01/24 14:43:51

ポイント60pt

そういうときは、fork を使うのでは?

fork do
  # この中は子プロセスだけの動作
  system("vmstat 1 10 > /dev/null")
end
# こちらは親プロセスが並列で動作
Process.wait
puts "vmstat finished"

Ruby初心者というよりは Unixプログラミングの入門書などを見てみることをおすすめします。

id:kanouk

ありがとうございます。

今後のヒントになりました。

2008/01/25 16:22:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません