fclose ():18 не является допустимым ресурсом потока

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

7
задан Kapil Kaushik 28 June 2012 в 15:04
поделиться