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

Tomokazu Tanaka tanaka-mag @ mithras.co.jp
2003年 11月 6日 (木) 23:48:15 JST


 こちらのMLでは初めて投稿させていただきます、ミトラスの田中です。

 現在、CLI(CGI)版のPHP(4.3.4RC3)にてpcntl_signal()を使用したデー
モンの作成にチャレンジしているのですが、どうも上手くいきません。
 当然、configure のオプションに --enable-pcntl は付けており、pcntl_fork()の
動作は確認できています。

% kill -KILL pid 

 だとプロセスは強制終了しますので、シグナル自体は送られているようなのですが、
-KILL 以外のシグナルにはまったく反応しないようで困っています

 ソースは以下の通りなので、-HUP と -TERM でプロセスが終了するはずなのですが、
無反応という状態です。

=====================================================================
#! /usr/local/bin/php -q
<?

	set_time_limit(0);
	ini_set( 'display_errors' , false );

	while ( 0 < ob_get_level() ) {
		ob_end_flush();
	}

	pcntl_signal( SIGTERM , "sig_handler" );
	pcntl_signal( SIGHUP , "sig_handler" );

	while ( true ) {
		sleep(5);
	}

	function sig_handler( $signo ) {
		exit;
	}


?>
=====================================================================

 どなたか同じような経験をされ、解決できた方はいらっしゃいますでしょうか?

 また、現在はCGI版としてCLI版をインストールしているのですが、これは
configure 時にSAPIを指定しないと怒られてしまうため、apxs版よりはまし
だろうと、apxs版には --enable-pcntl を付けず、CGI版に --enable-pcntl 
を付けて make したためなのです。

 理想的にはCGI版は必要なく、apxs版とCLI版の2種類がインストールで
きれば良いのですが、よい方法はないでしょうか?

 次善案として、apxs版に --enable-pcntl を付けて make し、apxs版をも
う一度 --enable-pcntl 無しで make するというのも考えてはいるのですが、ちょっ
と怖い気もしています。

 良いお知恵があれば、ご指導ください。

 よろしくお願いいたします。


----------------------------------------------------------------------------
 株式会社 ミトラス / Mithras Co.,LTD.
  ネットワーク開発部  田中 友和 / Tomokazu Tanaka <t-tanaka @ mithras.co.jp>
  〒112-0013  東京都 文京区 音羽 2-11-19 オトワKSビル 6F
  ◇ TEL: 03-5977-3255 ◇ FAX: 03-5977-3256 ◇ http://www.mithras.co.jp/ ◇

           ********** メールアドレスが変更になりました **********
             <tanaka @ mithras.co.jp> → <t-tanaka @ mithras.co.jp>
           ******************************************************





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