====== AlWorker 外部プログラム実行/管理 ====== require "al_worker_program" ---- 外部プログラムを実行する機能です。\\ 実行終了を待つことなく、自プログラムも平行して動作します。\\ 同じプログラムの重複実行を防ぐことができます。\\ 現在実行中か判断したり、実行を停止したりすることができます。\\ ====== サンプル ====== require "al_worker_program" require "al_worker_tcp" class Worker1 < AlWorker def initialize2() @pgm = Program.new( "sleep", "10" ) @tcp = Tcp.new() @tcp.run( self ) end def tcp_sleep( sock, param ) result = @pgm.run sock.puts result ? " SUCCESS" : " FAIL" return true end def tcp_alive( sock, param ) sock.puts @pgm.alive? ? " ALIVE" : " DEAD" return true end def tcp_kill( sock, param ) result = @pgm.kill sock.puts result ? " SUCCESS" : " FAIL" return true end end server = Worker1.new() server.daemon() ===== 解説 ===== 常駐して、以下の3種類のコマンドを受け付けます。 sleep * 外部プログラム "sleep" を実行します。 * 10秒間スリープします。 * 実行できたら、SUCCESSと返します。 * 実行できなければ、FAILと返します。 alive * 実行中かどうかを、ALIVE, DEAD で返します。 kill * KILLシグナルを送って、停止を試みます。 * シグナルを送ることができたら,SUCCESSと返します。 ====== 個別機能 ====== 実行プログラムの宣言と実行 pgm = Program.new( "sleep", "1" ) pgm.run() 即実行 pgm = Program.run( "sleep", "2" ) 実行中か? pgm.alive? 実行中断 pgm.kill Program.kill( "sleep" ) # 名前を指定して中断 実行終了を待つ pgm.wait() pgm.wait( 5 ) # with timeout 5sec 実行終了イベント pgm.run() { work_at_end() } パラメータを替えながら何度も実行 pgm = Program.new( "sleep" ) pgm.args = [ "1" ] pgm.run() pgm.wait() pgm.args = [ "2" ] pgm.run() 重複起動(mode_singleフラグを変更する方法) pgm1 = Program.new( "sleep", "1" ) pgm1.mode_single = :plural pgm1.run() pgm2 = Program.new( "sleep", "1" ) pgm2.mode_single = :plural pgm2.run() 重複起動(名前を替える方法) pgm1 = Program.new( "sleep", "1" ) pgm1.name = "managed one" pgm1.run() pgm2 = Program.new( "sleep", "1" ) pgm2.name = "managed two" pgm2.run()