[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 メーリングリストの案内