RUBYメモ:コマンドのプロセス番号取得 [プログラム]
プログラムの話というかメモです。
Linux マシンで Ruby を使ってプロセス管理のプログラムを書いているのですが、外部コマンドを起動して自由にコントロールする必要がありました。
起動したコマンドにシグナルを送ろうと思った時に Ruby のバージョンが 1.9 以上なら spawn というコマンドが使えますが、そうでないので 、fork してプロセスを分岐してそこで system を起動してなんとかしたのですが、コードのサンプルが無く苦労したので載せます。
GetCmdPrcId(fork したプロセス番号) でコマンドのプロセス番号が帰ります。
Linux では動作確認していますが、他は確認していません。たぶん、動きません。ps とか使ってますし。
素直に ruby 1.9 を入れられればいいのですが、あんまり環境が良くないです。
Linux マシンで Ruby を使ってプロセス管理のプログラムを書いているのですが、外部コマンドを起動して自由にコントロールする必要がありました。
起動したコマンドにシグナルを送ろうと思った時に Ruby のバージョンが 1.9 以上なら spawn というコマンドが使えますが、そうでないので 、fork してプロセスを分岐してそこで system を起動してなんとかしたのですが、コードのサンプルが無く苦労したので載せます。
# ----------------- # コマンドのプロセスIDを得る # in: # ppid : fork したプロセス ID def GetCmdPrcId(ppid) cnt = 2; # 適当調整必要 while cnt > 0 # ppid を親に持つプロセスのIDを返す ps1 = `ps --ppid #{ppid}`.chop; if ps1 =~ /^(\d+)/ ppid = $1; else # 既に終了している return -1; end cnt = cnt - 1; end return ppid.to_i; end ------- プロセステスト ruby prcid = fork; if prcid == nil system("(foolongtermprg > stdout.log) 2> stderr.log"); exit 1; end sleep 2; print "parent ",prcid,"\n"; cprcid = GetCmdPrcId(prcid); Process.kill(:INT,cprcid); # コマンドに INT を送る Process.waitpid(prcid);
GetCmdPrcId(fork したプロセス番号) でコマンドのプロセス番号が帰ります。
Linux では動作確認していますが、他は確認していません。たぶん、動きません。ps とか使ってますし。
素直に ruby 1.9 を入れられればいいのですが、あんまり環境が良くないです。
2011-10-01 22:31
nice!(0)
コメント(0)
コメント 0