Windows上で、Rubyから外部プロセス*1を起動〜終了監視する方法のメモ。 Windowsでプロセス起動〜終了制御を行うならwin32-processが便利。 しかしこれはノンブロッキングモードをサポートしておらず、終了監視メソッドwaitpid()はスレッドをブロックしてしまう。例えばDRbの内部で使うと、起動したプロセスが終了するまでDRb全体が応答しなくなる。それは困る。 そこで、Win32APIを直接呼び出してプロセスを制御することで回避。 require 'rubygems' require 'win32/process' require 'windows/synchronize' require 'windows/process' require 'windows/handle' include Windows::Synchronize include Windows::