[PHP-users 35261] Re: php cli版での常駐プログラムとメモリ開放について

WAKITA, Yoshi ysh @ wakita.no-ip.com
2010年 6月 25日 (金) 18:40:38 JST


増田さま、再び わきた です。
ちょっと理解できないことが・・・

 増田さまのやりたいことが、「子プロセスのなかでループ」方式でできるのな
ら、なぜ fork() する必要があるのですか? fork() などせずに、親プロセス
のなかでループを回せば良いことだと思うのですが。

 それと、この処理は、元メールに書かれているような「案の定子プロセスが増
え続け」るような、複雑で危険な処理ではありません。
 fork() した親プロセスはきちんと子プロセスの終了を待ち、生成された子プ
ロセスはきちんと exit() しさえすれば、子プロセスが増え続けるようなことは
ありませんし、従ってプロセス数に上限を設けたりする必要もありません。

 元メールで示された URL での論議も、拝読させて頂いたところ「子プロセス
が増殖する云々」の論議ではなく、「オープンしたリソースが fork() で複製さ
れることへの対処」に関する論議です。


> 前は子プロセスが終わった「あと」にexitしたら、どうも思うように動かなかっ
> たので、終了直前にexitすればよかったんですね。

 増田さまのこのコメントから推察するに fork() に対する理解が足りないよう
に思います。
 php の pcntl_fork() ではなく、UNIX / Linux の fork() システムコールの
しくみについてググると幸せになれると思います。
 php ドキュメント関数リファレンスの pcntl_fork() の項にも、

	システム上でのフォークの動作の具体的な詳細については、
	実行するシステムの fork(2) の マニュアルを参照ください

と書いてありますよ。



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