====== 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()