[PHP-users 18847]Re: pcntl_signal()が期待通りの動作をしない

komura komura @ ma9.seikyou.ne.jp
2003年 11月 7日 (金) 15:04:59 JST


komura です。

On Thu, 06 Nov 2003 23:48:15 +0900
Tomokazu Tanaka <tanaka-mag @ mithras.co.jp> wrote:

>  現在、CLI(CGI)版のPHP(4.3.4RC3)にてpcntl_signal()を使用したデー
> モンの作成にチャレンジしているのですが、どうも上手くいきません。
>  当然、configure のオプションに --enable-pcntl は付けており、pcntl_fork()の
> 動作は確認できています。
> 
> % kill -KILL pid 
> 
>  だとプロセスは強制終了しますので、シグナル自体は送られているようなのですが、
> -KILL 以外のシグナルにはまったく反応しないようで困っています

PHP マニュアルのプロセス制御関数(英語)に書いていますが、

http://jp.php.net/manual/en/function.pcntl-signal.php

PHP 4.3.0 以降では、先に

declare(ticks = 1);

を記述する必要があるそうです。
ソースの最初の方に追加して再度試してみると期待通りの動作になるのでは
ないでしょうか。


>  また、現在はCGI版としてCLI版をインストールしているのですが、これは
> configure 時にSAPIを指定しないと怒られてしまうため、apxs版よりはまし
> だろうと、apxs版には --enable-pcntl を付けず、CGI版に --enable-pcntl 
> を付けて make したためなのです。
> 
>  理想的にはCGI版は必要なく、apxs版とCLI版の2種類がインストールで
> きれば良いのですが、よい方法はないでしょうか?
> 
>  次善案として、apxs版に --enable-pcntl を付けて make し、apxs版をも
> う一度 --enable-pcntl 無しで make するというのも考えてはいるのですが、ちょっ
> と怖い気もしています。

何が言いたいのかよく分かりません。

もし、Apache の DSO 版では、プロセス制御関数を有効にせずに、
CLI 版では有効にしたいということであれば、別々に configure を
実行して、インストールするという方法が確実だと思います。

例えば、

$ ./configure \
    --with-apxs=/usr/local/apache/bin/apxs \
    --disable-cli \
    --disable-cgi

で、Apache DSO 版をインストールして、
次に、

$ ./configure \
    --disable-cgi \
    --enable-pcntl

として、CLI 版をインストールするという方法です。

--
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内