[PHP-users 15945]
Re: Is it possible that similar coding use signal() and alarm() on C ?
komura
komura @ ma9.seikyou.ne.jp
2003年 6月 14日 (土) 11:45:28 JST
komura です。
On Fri, 13 Jun 2003 20:30:19 +0900
Youichi Iwakiri <yiwakiri @ st.rim.or.jp> wrote:
> いわきりです
>
> Cで書くと簡単なんですが、signal()とalarm()を使って
> SIGALRMを受ける処理と同様のことが可能でしょうか?
>
> PHPでは、pcntl拡張モジュールを使えば何とか
> なりそうなんですが、いまいち納得出来ない部分があります。
>
> 実現したいことは、特定の子プロセスをsocket_read()にし、
> 指定した秒数内に、データが送られてこなかった
> 場合に、後かたづけをして終了させるというものです。
>
> 現在は、bogus_alarm()関数を作成し、tick_functionに
> 登録することで誤魔化していますが、alarm()の様に
> システムにインターバルを設定できないのか、肝心な関数を
> 見落としていないか気になっています。
試した訳ではないのですが、
指定した秒数以内に socket からデータが受け取れなかった場合、
子プロセスを kill するという方法であれば、
PHP マニュアル
socket_select()
stream_select()
と、
man select
などの例を見ていると、できそうな気がしました。
ここからは余談(もしかしたら本題なのかもしれません)なのですが、
ソースを眺めてみると、ext/pcntl/pcntl.c に、pcntl_alarm という
関数が用意されていました。
PHP マニュアルに記述はありませんが、PHP 4.3.0 で追加されている
ようです。
http://jp.php.net/ChangeLog-4.php
には、PHP 4.3.0 の欄に pcntl_alarm() が追加されたという記述が
ありました。
とりあえず、pcntl を有効にして PHP 4.3.2 をコンパイルして試して
みましたが、関数は使用可能のようです。
--
komura <komura @ ma9.seikyou.ne.jp>
PHP-users メーリングリストの案内