赤心慶福

talk about rss feed #17

前の記事で、Windows の php(cli)では ctrl-c がキャッチできないと書いた。

しかしできないなら、そういうエクステンションを書けばいいのではないか。

つまり
  • モジュールの初期化時に 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 のソースを見てみたが大体同じようなことをやっていた。

誰か作ってくれないかなー(チラッ

talk about rss feed #16talk about rss feed #18

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies