Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 奇怪的管道故障案例_Linux_Bash_Pipe_Ldd - Fatal编程技术网

Linux 奇怪的管道故障案例

Linux 奇怪的管道故障案例,linux,bash,pipe,ldd,Linux,Bash,Pipe,Ldd,有人能告诉我以下问题的可能原因吗。大多数情况下,我可以运行(set-o pipefail;ldd--version | head-n1;echo$?)并获得以下信息 $ ( set -o pipefail; ldd --version | head -n 1; echo $? ) ldd (Ubuntu GLIBC 2.23-0ubuntu9) 2.23 0 但随后它就会开始失败 $ ( set -o pipefail; ldd --version | head -n 1; echo $?

有人能告诉我以下问题的可能原因吗。大多数情况下,我可以运行
(set-o pipefail;ldd--version | head-n1;echo$?)
并获得以下信息

$ ( set -o pipefail; ldd --version | head -n 1; echo $? ) 
ldd (Ubuntu GLIBC 2.23-0ubuntu9) 2.23
0
但随后它就会开始失败

$ ( set -o pipefail; ldd --version | head -n 1; echo $? ) 
ldd (Ubuntu GLIBC 2.23-0ubuntu9) 2.23
141

我已经在Ubuntu 16.04 x86_64和RHEL 7.3 ppc64le机器上看到了它的价值,它是
EINIT
。i、 过程被中断

发生的情况是,
head-1
在读取第一行后关闭其输入流。当
ldd
尝试写入关闭的管道时,它会失败,并显示
EINIT

通常情况下,您看不到这一点-程序在
head
获取了它想要的内容后会带着错误退出,但您看不到错误结果。但是因为您已经设置了-o pipefail,所以您看到了错误

这是间歇性的,因为管道中有一个缓冲区,并且调度是不可预测的。有时
ldd
head
关闭管道之前已完成写入

如果您使用
ldd | echo
(因为echo会立即关闭stdin),您可以始终看到失败,并且您可以始终看到它使用
ldd | cat
成功(因为
cat
在EOF之前始终消耗)。

我确信这是知识库中已有内容的重复;只需要找到它……啊,