Rubyから外部コマンドを起動して、一定時間が経過しても終了しなかったらkillする、という処理をしようと思って次のようなコードを書いてみた(実際にはSTDOUT, STDERRを取るなどもっと複雑)。 #!/bin/sh # Rubyから呼び出される外部コマンド echo "do something" sleep 30 echo "done something" # 外部コマンドを実行してタイムアウトしたらkillする require "timeout" cmd = "/tmp/heavy.sh" pid = spawn(cmd) thr = Process.detach(pid) begin Timeout.timeout(3) do thr.join end rescue Timeout::Error puts "execution expired" Process.kill(:TE