止まらない
作った自動テストシステムに無限ループになるようなコードを送り込むと、当たり前だが結果が返ってこない。IO.selectを使って5秒経っても返ってこなければタイムアウトとして扱うようにして問題解決、と思いきや、子プロセスが死なないようで、CPUがフルパワーで回りつづける。これはまずい。
標準入力/出力を閉じても子プロセスが死なないというのが問題だ。まぁ、リファレンスにも「コマンドは実際には孫プロセスとして動作する」と書いてあるし、仕方がない。
open3では子プロセスのpidは取れないので、なんとかしなければならない。
- 案1:killall goshを実行する。 → さすがにやりすぎだろう
- 案2:自動実行用のgoshを起動したら、テストコードをevalする前に自分のpidを送らせる → あんま美しくないなぁ
- 案3:gosh側で5秒経ったらexitする。 → スレッド使うのめんどくさい
案2と案3はどちらが楽だろうか…。とりあえず案2で実装してみた。うまくいってるぽい。