我想使用proc_open函数启动CLIPS进程,以便与CLIPS脚本进行交互。所以,如果我这样设置:
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array('pipe', 'r') // 2 is STDERR for process
);
$process = proc_open('./clips -f troubleshooter.clp', $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], '(exit)\n');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
}
一切似乎都很好。该过程已开始并正确结束
但是当发送多个输入到CLIPS shell时,如:
if (is_resource($process)) {
fwrite($pipes[0], '(run)\n');
fwrite($pipes[0], '(exit)\n');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
}
然后进程没有终止,PHP挂起在proc_close,只有从系统监视器中终止进程才结束。检查stream_get_contents
输出似乎(退出)输入永远不会发送到进程。此外,当调用fclose($pipes[0]
)时,CLIPS进程的CPU使用率从0%直接变为100%。这可能是什么原因?