アクターをブロックせずにサブプロセスを生成する最良の方法は何ですか?
私の目標は、複数のコマンドを実行し、それらが完了したら、出力と終了コードを取得することです。私はこれを試しましたが、明らかに、 popen 呼び出しがブロックされています:
#!/usr/bin/env ruby
require 'celluloid/current'
require 'celluloid/io'
class MyProcessLauncher
include Celluloid::IO
def run
every(1) { puts "tick" }
every(5) {
puts "Starting subprocess"
::IO.popen("sleep 10 && echo 'subprocess done'", :err=>[:child, :out]) { |io|
puts io.read
}
puts $?.exitstatus
}
end
end
MyProcessLauncher.new.run
sleep
出力は次のとおりです。
tick
tick
tick
tick
Starting subprocess
subprocess done
0
tick
Starting subprocess
しかし、各「サブプロセスの開始」の間に5つの「ティック」が必要です...
ありがとう !