通常は終了するまで実行されるプログラムがありますが、状況によっては、2 つの子プロセスが作成され、メイン プロセスが終了します。メインプロセスが終了した後も、子プロセスは引き続き実行されます。
このプログラムを PHP で呼び出したい。
もともと、私は次の戦略を使用しました(有効なphpコードではありません)、
$process=proc_open("python xxx.py");
while (1) {
sleep(5);
$status = proc_get_status($process);
if (!$status['running']) {
exit_loop;
}
if (timeout) {
proc_terminate($process, 9);
exit_loop;
}
}
しかし、すぐに、$status['running'] が false であるというプロセスが実際にはすぐに終了するというバグが見つかりましたが、子プロセスはまだ実行されています。すべての子プロセスを実際に待つ方法は?
2 番目の質問は、proc_terminate を調べていないことですが、proc_terminate が期待どおりに機能しない可能性があることも確認しました。$process は bash ですが、実際の python プロセスではないためですか? また、終了したのは親のメインプロセスのみであり、子プロセスではないためかもしれません。
上記のコードが堅牢な PHP コードであるかどうかについて、誰かがアドバイスしてくれますか? これに対処するより良い方法はありますか?
ありがとう。
======================
より詳しい情報、
このプログラムはシェル (CLI) で実行しますが、CGI 関数とは関係ありません。したがって、max_execution_time について心配する必要はありません。
proc_open によって開かれたメイン プロセスによって作成された子プロセスを待ちたいので、プログラム内にプロセスを 1 つだけ作成します。
呼び出したい python プログラムが長時間ハングする可能性があるため、タイムアウトを確認して終了したいと考えています。