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
alive
kill
実行プログラムの宣言と実行
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()