私は輪になって走っています。巨大なファイルを作成するウェブページがあります。このファイルは作成に永遠にかかり、サブルーチン内にあります。
私のページがこのサブルーチンを実行するが、それが作成/処理されるのを待たないための最良の方法は何ですか?Webページからこれを行っているので、apacheプロセスに問題はありますか?
私は輪になって走っています。巨大なファイルを作成するウェブページがあります。このファイルは作成に永遠にかかり、サブルーチン内にあります。
私のページがこのサブルーチンを実行するが、それが作成/処理されるのを待たないための最良の方法は何ですか?Webページからこれを行っているので、apacheプロセスに問題はありますか?
このタスクを実行する最も簡単な方法fork()
は、子プロセスで実行時間の長いサブルーチンを単純に使用して実行することです。その間、親を Apache に戻します。あなたはすでにこれを試したことを示していますが、コードがどのように見えるか、何が失敗しているのかについての正確な情報がなければ、この道を進むのを助けるのは難しいです.
別のオプションは、長時間実行されるタスクの管理を担当する別のプロセスを実行することです。ローカル ソケットを使用して (または必要な入力データを含むファイルを作成することにより)、Web ページが長時間実行プロセスに作業単位を送信すると、別のプロセスが長時間実行プロセスを完了する間、Web スクリプトはすぐに戻ることができます。仕事。
実行を分離するこの方法はかなり一般的であり、「タスク キュー」と呼ばれることがよくあります (リクエストが入ってくるときにキューに入れるための何らかのメカニズムがある場合)。この種のソリューションの設計に役立つツールは数多くあります (ただし、ファイル システム ベースの通信を使用する単純なケースでは、ツールがなくても問題ない場合があります)。
Apache のワーカー孫を作成したいと思います。つまり、次のようになります。
Apache -> child -> grandchild
ここで、子は孫をフォークした直後に死亡し、孫は STDIN、STDOUT、および STDERR を閉じます。(次に孫がファイルを作成します。) これらは、ゾンビ デーモン (Web サーバーに接続されていない、親のないワーカー プロセス) を作成するための基本的な手順です。