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
のようにしたら、プロセス生成してもそこで止まることは無くなりました。