または、select を使用して、コマンドが戻るのを待つことができます。proc_open() および stream_select() を参照できる PHP マニュアルからコピーしたコードの例を次に示します。
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("file", "/tmp/error-output.txt", "a")
);
$pipes = array();
$process = proc_open('sleep 5 && echo hello', $descriptorspec, $pipes);
$timer = 0;
if (is_resource($process)) {
while(true) {
$write = null;
$except = null;
$read = array($pipes[1]);
$ret = stream_select($read, $write, $except, 1);
if ($ret === false) {
echo "error";
break;
} else if ($ret == 0) {
echo "waiting for " . ++$timer . "sec" . PHP_EOL;
} else {
echo stream_get_contents($pipes[1]);
break;
}
}
fclose($pipes[1]);
$return_value = proc_close($process);
echo "command returned $return_value\n";
}
?>