PHP proc_open多输入

时间:2013-09-27 13:27:35

标签: php clips proc-open

我想使用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%。这可能是什么原因?

0 个答案:

没有答案