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
。
谁能说,为什么下面的代码在 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
。