[PHP-users 25180] Re: cli をデーモンとして使用する際の注意
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2005年 3月 29日 (火) 14:23:02 JST
桝形です。
> komura です。
>
> > 厳密に管理する術があるなら教えてホシィです。
>
> この問題ですが、デーモンにするのであれば、pcntl_fork() を使用すること
> で回避できないでしょうか?
連絡が遅くなってしまいましたが試してみました。
個人的な感想ですが(使い方次第では)いけるのでは、と思いました。
(子プロセスに処理をまかせて、そちらのリソースを適時開放という事ですね)
forkのオーバーヘッドは仕方が無いと考えます。
以下のプログラムでは、もう少し考慮するトコロがありますが
その辺ご容赦。。。という事で。
daemon_test.php:
---------------------------------------------------------------------
#!/usr/local/php/5.0.3/bin/php -c /home/masugata/daemon/php.ini
<?
set_time_limit( 0 );
$Connect = mysql_connect( "*****", "*****", "*****" )
or die( "Could not connect[".mysql_error( $Connect )."]" );
mysql_select_db( "*****", $Connect )
or die( "Could not select database[".mysql_error( $Connect )."]" );
while( true )
{
echo "---------------------------------------------\n";
$pid = pcntl_fork( );
if( $pid === -1 ){ exit; }
// 親プロセス
if( $pid )
{
pcntl_waitpid( -1, $status, WUNTRACED );
// ↑この辺イジるとコネクション数が子プロセスの数分だけ
// ↑増えたので並列展開は難しいのカモ
// ↑リソース絡みは共有ではなくて丸々コピーしているような
// ↑動作。それによってコネクション数が増えているように
// ↑見えたのかも(想像)
// ↑「mysqladmin status」コマンドのThreads数で確認。
continue;
}
// 子プロセス
$SQL = "select * from test where no1 != '1'";
$Result = mysql_query( $SQL, $Connect );
if( $Result == false )
{
die( "warning!![".mysql_error( $Connect )."]\n" );
exit;
}
$DB_Array = array( );
while( $Record = mysql_fetch_array( $Result, MYSQL_ASSOC ) )
{
$DB_Array[] = $Record;
}
echo "[".date( "Y/m/d H:i:s" )."]SELECT => ".count( $DB_Array )."\n";
exit;
}
?>
---------------------------------------------------------------------
--
Seiji Masugata<s.masugata @ digicom.dnp.co.jp>
PHP-users メーリングリストの案内