我正在尝试使用 proc_open 执行进程。进程的 I/O 由管道处理!
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
现在,碰巧的是,有时我打开的“c 程序”确实卡住了,我添加了一个 max_time_limit 检查,它会强制关闭进程。我添加了回调函数 - 即 onExit -(使用“call_user_function”)以在“进程退出”时以有效方式或强制方式处理信息。
在“退出”功能中,我正在关闭 i/o 管道
foreach ($pipes as $pipe) {
fclose($pipe);
}
如果进程有一个有效的退出,上面的工作非常好。但是,在我强行终止进程的情况下,我调用了 proc_terminate 来执行此操作。我知道进程的终止也会继续并关闭任何 I/O 管道,但问题是由于回调,我的“onExit”函数进程总是被调用(这就是我想要的方式.. .因为我需要做更多的处理)。现在,在这种情况下,当我尝试关闭管道时,我收到以下错误:
fclose(): 18 is not a valid stream resource
我尝试使用“ftell”来检查管道是否有效,但这也出错了。如何检查管道是否已经关闭?