У меня есть программа, которая обычно запускается до ее завершения, но в некоторых ситуациях она создает два дочерних процесса, и основной процесс затем завершается.Дочерние процессы будут по-прежнему выполняться после выхода из основного процесса.
Я хочу вызвать эту программу на 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, я создам только один процесс в программе.
Программа Python, которую я хочу вызвать, может зависать очень долго, поэтому я хочу проверить время ожидания и завершить его.