这是一个用于随机生成10个字符密码的管道命令:
cat /dev/urandom | base64 | head -c 10
我的问题是cat /dev/urandom | base64
是一个无限输出流,不会自行停止。但为什么附加head -c 10
会使整个管道终止?我假设cat
,base64
和head
是3个独立的流程,head
如何终止cat
?
答案 0 :(得分:23)
head
在读取所需金额后关闭输入文件。当管道从一侧关闭时,另一侧会出现写入错误;这会导致base64
关闭,从而导致cat
关闭。
答案 1 :(得分:11)
base64
输出10个字节后,head
获得足够的输入和退出。当前者尝试输出更多字节时,它将收到SIGPIPE signal,因此也会退出。出于同样的原因,cat
将依次退出。
答案 2 :(得分:4)
管道通过将一个进程A的输出连接到B的输入来工作。连接可以被破坏,何时
由于这两种情况如此常见,因此处理已移至C标准库中。