php -> fwrite 处理管道挂起 -> 为什么?

php -> fwrite to process pipe hangs -> why?

谁能说,为什么下面的代码在 fwrite($pipes[0], $data); 上挂起,但是当我将 $bytesCount 更改为例如 1000 时却没有挂起?

我无法通过 google 找到答案:(
谢谢。

$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w")
);

$bytesCount = 1000000;
$process = proc_open('cat', $descriptorspec, $pipes);
$data = str_repeat('a', $bytesCount);
fwrite($pipes[0], $data);
fclose($pipes[0]);
$response = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);

管道是用输入和输出缓冲区实现的。 cat 开始读取,并将所有内容复制到输出。当输出缓冲区已满时,其写入将被阻止。

由于没有任何内容正在读取 cat 的输入(因为永远不会到达该行),它将无限期地阻塞,阻塞你的 fwrite