[PHP-users 14643]Re: PHPから、長時間かかる処理をバックグラウンドで呼びたい
kinosita
kino @ deneb.jp
2003年 4月 14日 (月) 16:37:51 JST
こんにちは。木下というものです。高柳さんレスありがとうございます。
> 高柳です。
>
> 当方の環境では「find /」でもほんの数秒で返ってきてしまうので
> 「sleep 30」とかで置き換えてテストしましたが、ブラウザ側には
> 即時にSHELL_ENDも表示されるし、.../test.php を開いています…
> というのも表示されていません。それでもpsでプロセスを確認する
> とちゃんとsleepは動き続けてました。
>
> > 今回の疑問点は、シェルの制御が終わっている(SHELL_END,</html>が表示さ
れ、
> > 終わっているように見える)にも関わらず、PHP側の制御が終わらない点で
す。
>
> PHP側の制御が終わらないというのは .../test.php を開いています…
> のメッセージが表示され続けてるからそう判断されたのでしょうか?
判断した根拠は以下のとおりです。
(1) SHELL_END, </html> が 時間のかかる処理の行(find)の有効/無効に関わらず
瞬時に表示される。
(2) シェルでのfind の行をコメントアウトした場合には、すぐに制御が戻る
( .../test.php が開いていますとは表示されない)
シェルでのfind の行を有効にした場合には、</html> まではすぐに表示される
が、
.../test.php を開いています。 と表示され、ブラウザ側で待ち状態になって
しまう。
(3) (追加調査結果) find の行を有効にした場合、.../test.php を開いています。
と表示され、
制御がもどらない状態になっている(=.../test.php が開いていますと言われ
る)
ここで時間のかかるプロセスを明示的にkill すると、すぐに制御がもどる。
高柳さんのところで、問題なく動いたと言うことであれば、考えづらいですが、
環境依存でしょうか?
(WEBサーバーに、SunONE というものを使っているらしく、多少、身に覚えがあり
ます)
※投稿前に、php + nohup などで検索をかけたのですが、有効なものが私には
発見できませんでした。
PHP-users メーリングリストの案内