Terminate process in signal handler.

12:07 gfx_: App::watcher、コマンドに失敗すると kill -KILL
しないといけなくなる気がする。
12:07 tokuhirom: なんか bingos
の環境がこわれてるのかしらんけど、すごいいきおいで FAIL report くる
12:07 tokuhirom: どういうこっちゃ
12:08 gfx_: iya失敗とか関係ないか
12:08 gfx_: watcher --dir . -- true でSIGINTで消えない
12:09 gfx_: ^C[2014-02-27T12:08:36] SIGINT resieved
12:09 gfx_: とかなるだけ。しょうがないのでSIGKILLするしかない…。
12:09 gfx_: on OSX
12:09 gfx_: watcher 0.08
12:10 tokuhirom: んー
12:10 gfx_: perl 5.18.1
12:11 tokuhirom: Mac::FSEvents つかってる?
12:12 tokuhirom: PERL_FNS_NO_OPT=1 watcher ... したら挙動かわる?
12:15 tokuhirom: ああ、うん
12:15 tokuhirom: たしかにうまくいかないね
12:19 tokuhirom: んー
12:20 tokuhirom: Linux::INotify2 ならとまるんだよなw
12:22 tokuhirom: Mac::FSEvents もだめそう
12:25 tokuhirom: んー
12:25 tokuhirom: Filesys::Notify::Simple
の中で永遠にとまるのがダメっぽいんだけど
12:26 tokuhirom: Filesys::Notify::Simple
を途中でリタイアさせる手段がないから
12:27 tokuhirom: こまるな
12:28 tokuhirom: alarm かなー
12:30 tokuhirom: Filesys::Notify::Simple が timeout
パラメータをサポートしてくれればよさそうだけど、それはむずかしそうかなあ
12:30 tokuhirom: とおもっている
12:32 mattn_jp_: ループを抜ける動作？
12:36 kazuho_: signal handler を自分で書いて exit
すればいいんじゃないの？
12:36 kazuho_: なぜなら、Filesys::Notify::Simple
のレベルまでは制御もどってきてるんじゃないかと思うから
12:37 tokuhirom: んー
12:38 tokuhirom:
http://cpansearch.perl.org/src/TOKUHIROM/App-watcher-0.08/bin/watcher
12:38 tokuhirom: 今のコードがこれで
12:38 mattn_jp_: sleep のやつは alarm でとけそうだけど、他のはどうだろ
12:38 tokuhirom: なんかループおわった後で signal
の処理を実際にするようにしてるっぽいんですが
12:38 tokuhirom: その場でやるようにかえればいいか
12:40 kazuho_: はいー #ありがち
12:40 kazuho_: シグナルハンドラのなかで $watcher->terminate
12:40 kazuho_: とかできるのが一番綺麗なんでしょうね
12:40 tokuhirom: そうなんですけど
12:40 tokuhirom: 実際、いろんなモジュールに delegate してるから
12:41 tokuhirom: 全部のパターンでそれをうごかすのがつらそうなんですよね
12:41 kazuho_: まーなので、シグナルハンドラの中でやっちゃうのがいいかと
12:41 tokuhirom: ですねー
12:42 kazuho_: それか、きれいに書きたいなら、$watcher
を子プロセスで動かして、変更があったら親プロセスにシグナルが飛んでくるとかそういう形にするんだろうなー
12:42 mattn_jp_:
いっそwatchな部分をforkしてやって、終わらせたい時にkill(ありえない
12:42 mattn_jp_: うひw
12:42 tokuhirom: w
12:42 kazuho_: いや、ありがちですよそういう実装
12:42 kazuho_: あとテストが楽になるのでいいw
12:43 mattn_jp_: windows 殺し
12:43 tokuhirom: windows だとだめなんだっけ?
12:43 tokuhirom: なにがだめなんだろ
12:45 mattn_jp_: Test::TCP みたいな事がおきる
12:45 tokuhirom: 親殺しができない?
12:45 mattn_jp_: とか、クラッシュとか
12:46 mattn_jp_: 各種 delegate 部に手を入れた方が根本解決しそう
12:47 gfx_:
っていうか他のツールつかったほうが速いかもしれん！類似ツールをおしえてくれるのでも全然いいです！
12:47 gfx_: 2年間だれも気付かなかったバグだし…。
12:48 gfx_: でもguardfileとかgruntfileとか用意するのも面倒なんだよな。
12:48 tokuhirom: すぐなおるよw
12:48 gfx_: そう？
12:48 gfx_: じゃあ待ってる！
12:48 mattn_jp_: どんなのがご希望です？
12:48 mattn_jp_: CTRL-C で止めれるやつ？
12:49 mattn_jp_: c9s さんの gomon 結構いいすよ
12:49 mattn_jp_: https://github.com/c9s/gomon
12:50 typester: 拷問