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