talk about rss feed #17
Saturday, January 28, 2012 6:51:30 AM
前の記事で、Windows の php(cli)では ctrl-c がキャッチできないと書いた。
しかしできないなら、そういうエクステンションを書けばいいのではないか。
つまり
というような感じ。
これにより、たとえば
というようなコードで ctrl-c をキャッチして終了時の後始末を行えるようになるはず。
pcntl のソースを見てみたが大体同じようなことをやっていた。
誰か作ってくれないかなー(チラッ
しかしできないなら、そういうエクステンションを書けばいいのではないか。
つまり
- モジュールの初期化時に sapi が cli だったら SetConsoleCtrlHandler() を呼んで、適当な関数でキャッチするようにしておく
- シグナル受信時のハンドラとなる php 側コールバック関数のリストを保持しておく
- ハンドラを登録する php の関数を公開する
- ハンドラをディスパッチする php の関数を公開する。ハンドラをディスパッチする、とはシグナル受信済みだったら、登録された php 側の関数を順繰りに実行すること
- tick 関数でもハンドラをディスパッチする(tick まわりは deprecated なのかな?)
というような感じ。
これにより、たとえば
wincon_register_signal(function () {
release_resources();
exit(0);
});
while (true) {
wincon_dispatch_signal();
do_something_fantastic();
}
というようなコードで ctrl-c をキャッチして終了時の後始末を行えるようになるはず。
pcntl のソースを見てみたが大体同じようなことをやっていた。
誰か作ってくれないかなー(チラッ



How to use Quote function: