[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 メーリングリストの案内