systemuのハマりどころ
会社でちょっと話題になった。上司が解決してくれたのでメモしておく。
プロセスが長く掛かりそうなときに途中で殺す処理を入れることがある。
https://github.com/ahoward/systemuによると
require 'systemu' begin looper = %q( ruby -e" loop{ STDERR.puts Time.now.to_i; sleep 1 } " ) status, stdout, stderr = systemu looper do |cid| sleep 3 # <この辺> Process.kill 9, cid end p status p stderr rescue => ex # <例外キャッチ> # 例外処理 end
こんなソースコードがある。
問題なのは<この辺>で例外が発生した時にどうなるかだ。
<例外キャッチ>でキャッチできない。
do-endブロックの中でbegin-endしてやらないとダメ。