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

Masuda masuken @ gmail.com
2010年 6月 26日 (土) 01:18:30 JST


わきた 様,

ご返信ありがとうございます。増田です。

2010年6月25日18:40 WAKITA, Yoshi <ysh @ wakita.no-ip.com>:
>
> 増田さまのやりたいことが、「子プロセスのなかでループ」方式でできるのな
> ら、なぜ fork() する必要があるのですか? fork() などせずに、親プロセス
> のなかでループを回せば良いことだと思うのですが。
>
確かにそうですね。特に子プロセスにこだわる理由はありません。


> それと、この処理は、元メールに書かれているような「案の定子プロセスが増
> え続け」るような、複雑で危険な処理ではありません。
> fork() した親プロセスはきちんと子プロセスの終了を待ち、生成された子プ
> ロセスはきちんと exit() しさえすれば、子プロセスが増え続けるようなことは
> ありませんし、従ってプロセス数に上限を設けたりする必要もありません。
>
> 元メールで示された URL での論議も、拝読させて頂いたところ「子プロセス
> が増殖する云々」の論議ではなく、「オープンしたリソースが fork() で複製さ
> れることへの対処」に関する論議です。
>
>
>> 前は子プロセスが終わった「あと」にexitしたら、どうも思うように動かなかっ
>> たので、終了直前にexitすればよかったんですね。
>
> 増田さまのこのコメントから推察するに fork() に対する理解が足りないよう
> に思います。
> php の pcntl_fork() ではなく、UNIX / Linux の fork() システムコールの
> しくみについてググると幸せになれると思います。
> php ドキュメント関数リファレンスの pcntl_fork() の項にも、
>
>        システム上でのフォークの動作の具体的な詳細については、
>        実行するシステムの fork(2) の マニュアルを参照ください
>
> と書いてありますよ。
>
おっしゃるように理解が足りなかったので、マニュアル読んでみました。
まだ理解は足りていないと思いますが、
fork()で子プロセスを生成して何か並列で行うこともしません(それだけのために子プロセスの生成があるわけではない?)し、
単にwhileで常駐させたいだけのプログラムですので、
親プロセスでループさせても問題ありません。

UNIXの知識も深めていかないとダメですね。
勉強になりますので、色々ご指摘頂きありがとうございます。


増田
-- 
mailto:masuken @ gmail.com


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