Windows の Ruby で、Thread 内で新規プロセスを立ち上げようとすると、Thread 内で全体の動作を止めてしまうらしい。たとえば、
Thread.new do `something.exe` end |
とやってみると、something.exe
の処理が終わるのを待っているようだ。
Windows+Rubyで外部プロセスを立ち上げる時の注意 にまさにその情報が載っていた。Windows は、Windows::Process 等を使う必要があるみたいです。
require 'rubygems' require 'win32/process' require 'windows/synchronize' require 'windows/process' require 'windows/handle' include Windows::Synchronize include Windows::Process include Windows::Handle t = Thread.new do Process.create('app_name' => 'something.exe') end puts "hello!" t.join |
のようにしたら、プロセス生成してもそこで止まることは無くなりました。