2

私はAjaxを使用して、実行に数時間かかる可能性のあるPHPスクリプトを開始します。これは非同期で実行されるため、ブラウザーを閉じてもPHPスクリプトは完了します。

なんらかの理由で停止/ハングしたこれらのPHPスクリプトを処理する必要があります。これを行うための最良の方法は何ですか?アクティビティを定期的にチェックするために使用できるPHPスクリプトのプロセスIDを取得する方法はありますか?新しいスクリプトを開始する前に、未解決のスクリプトをすべて強制終了する必要があります。

ありがとう、ブライアン

4

1 に答える 1

5

解決策はこのアイデアに基づいている可能性があります:

  • 長時間実行されるスクリプトの開始時に、を使用getmypidしてそのPID(プロセスID)を取得します
  • そのPIDをファイルに保存する
  • スクリプトの最後で、スクリプトが終了する直前に、そのファイルを削除します。

別のプロセスが起動されると、そのファイルが存在するかどうかを確認できます。

  • そうであり、ファイルに含まれているPIDを持つプロセスがまだ実行されている場合は、次のことを実行する必要があります。
    • どちらかを殺す
    • または、同時に実行されている1つのプロセスで十分であると考えて停止します
  • ファイルは存在するが、そのPIDを持つプロセスが存在しない場合は、最初のプロセスが停止したことを意味します(たとえば、致命的なエラーなど)。
  • ファイルが存在しない場合は、最初のプロセスが正常に終了したことを意味します

プロセスが実行されているかどうかを検出し、最終的にはそれを強制終了することについて、PHPがそのような機能を提供するかどうかはわかりません...などのコマンドラインユーティリティを呼び出すために使用する必要があるかもしれませexecん...pskill

于 2009-09-26T20:39:52.950 に答える