Я пытаюсь выполнить процесс, используя proc _open. Ввод-вывод для процесса обрабатывается каналами !!
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
Теперь, как это бывает, иногда "программа c", которую я открыл, действительно зависает, и я добавил проверку ограничения максимального _времени _, которая принудительно завершала бы процесс. Я добавил функцию обратного вызова --, а именно onExit--(использование «вызов _пользовательской _функции» )для обработки информации всякий раз, когда «процесс завершается» допустимым образом или принудительно.
В функции «выход» я закрываю каналы ввода-вывода
foreach ($pipes as $pipe) {
fclose($pipe);
}
Вышеупомянутое работает отлично, если процесс имеет допустимый выход. Однако в случае, когда я принудительно завершал свой процесс, я вызывал для этого proc _terminate. Я понимаю, что завершение процесса также будет продолжаться и закроет все каналы ввода-вывода, но проблема в том, что из-за обратного вызова мой процесс функции «onExit» всегда вызывается (, и я хочу, чтобы это было так....поскольку мне нужно выполнить дополнительную обработку ). Теперь, в этом случае, когда я пытаюсь закрыть трубы,Я получаю следующую ошибку:
fclose(): 18 is not a valid stream resource
Я попытался использовать «ftell», чтобы проверить, действителен ли канал или нет, но это тоже вышло из строя. Как мне проверить, были ли трубы уже закрыты или нет??