我有一个程序通常运行直到它终止,但在某些情况下,它创建了两个子进程,然后主进程退出。主进程退出后,子进程仍将运行。
我想用 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'] 为假,但子进程仍在运行。如何实际等待所有子进程?
第二个问题是我没有研究过 proc_terminate,但我也观察到 proc_terminate 可能无法按我的预期工作。那是因为 $process 是一个 bash 而不是真正的 python 进程吗?也可能是因为我终止的只是父主进程,而不是子进程。
有人建议我上面的代码是否是健壮的 PHP 代码?有没有更好的方法来处理这个问题?
谢谢。
=======================
更多信息,
我在 shell (CLI) 中运行这个程序,与 CGI 函数无关。所以我不需要担心 max_execution_time。
我想等待proc_open打开的主进程创建的子进程,我只会在程序中创建一个进程。
我要调用的python程序可能会挂很长时间,所以我想检查超时并终止它。