2

CLIPS スクリプトと対話するために、proc_open 関数を使用して 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 シェルに送信する場合:

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% になります。この理由は何でしょうか?

4

0 に答える 0