我有一個程序通常運行直到它終止,但在某些情況下,它創建了兩個子進程,然後主進程退出。主流程退出後,子進程仍將繼續運行。如何等待進程終止(並等待相應的子進程)在PHP中?
我想用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;
}
}
但後來我很快就發現,該過程實際上會馬上退出[「運行」]即$狀態是假的bug,但兒童進程仍在運行。如何實際等待所有兒童進程?
第二個問題是我沒有看過proc_terminate,但我也觀察到proc_terminate可能無法正常工作。那是因爲$進程是一個bash,但不是真正的python進程?這也可能是因爲我終止的只是父母的主要過程,而不是子過程。
任何人都會告訴我,上面的代碼是否健壯的PHP代碼?有沒有更好的方法來解決這個問題?
謝謝。
======================
更多信息,
我在shell中運行這個程序(CLI)與CGI功能無關。所以我不需要擔心max_execution_time。
我想等待由proc_open打開的主進程創建的子進程,我只會在程序中創建一個進程。
我想調用的python程序可能會掛起很長時間,所以我想檢查超時並終止它。
感謝您的回答。 我在shell(CLI)中運行這個程序,並且與CGI函數無關。所以我不需要擔心max_execution_time。 我想等待由proc_open打開的主進程創建的子進程,我只會在程序中創建一個進程。 最後,使用其他程序可能會掛起很長時間的python程序,所以我想檢查超時並終止它。系統()可能不會終止超時我想? – user534498
@ user534498:啊,我明白了。更新了答案,但遺憾的是,你想要做的並不是PHP中可行的(至少沒有定製的PHP擴展)。 – Jon