system()
私は呼び出しを使用して他の (潜在的に長時間実行される) プログラムを実行するPHP スクリプトを持っています (目的: NCBI BLAST、phrap、primer3、および DNA シーケンス分析とアセンブリを行うためのその他のプログラム)。
コマンド プロンプトから、またはサービスとして PHP の CLI バージョンを使用して、Windows XP で実行しています。(どちらの場合も、データベース テーブル内のタスクのキューを介して通信します)。
PHP4 の場合: Ctrl+を押すCと、スクリプトが停止し、その時点で実行されているすべての子プロセスも停止します。PHP5 の場合: Ctrl+を押すとC、スクリプトは停止しますが、子プロセスは実行されたままになります。
同様に、スクリプトをサービスとして実行する場合、PHP4 で実行するとサービスを停止すると子が停止しますが、PHP5 では子は引き続き実行されます。
最小限のテスト アプリケーションを作成してみましたが、同じ動作が見つかりました。テスト PHP スクリプトは、system() を使用して C プログラム (30 秒間スリープするだけ) を実行し、キーが押されるのを待ちます。
PHP 4.4.9 と 5.2.6 のソースを見てみましたが、system() コードに違いは見られませんでした。また、CLI アプリケーションのスタートアップ コードもざっと見てみましたが、シグナル処理に違いは見られませんでした。
これを引き起こした原因、または回避策についてのヒントをいただければ幸いです。
ありがとう。