这是随机生成10个字符的密码一个管道命令:
cat /dev/urandom | base64 | head -c 10
我的问题是cat /dev/urandom | base64
cat /dev/urandom | base64
是一个无限的输出流,这将无法自动停止。 但是,为什么追加head -c 10
使得整个管终止? 我认为cat
, base64
和head
被3个分离过程,怎么能head
终止cat
?
这是随机生成10个字符的密码一个管道命令:
cat /dev/urandom | base64 | head -c 10
我的问题是cat /dev/urandom | base64
cat /dev/urandom | base64
是一个无限的输出流,这将无法自动停止。 但是,为什么追加head -c 10
使得整个管终止? 我认为cat
, base64
和head
被3个分离过程,怎么能head
终止cat
?
后base64
输出10个字节, head
得到足够的输入和退出。 当前者试图输出更多的字节,它会收到SIGPIPE信号 ,并因此退出too.For同样的原因, cat
将依次退出。
head
读取所需量后关闭输入文件。 当一个管从一侧封闭,另一侧得到写入错误; 这导致base64
关闭,这反过来又导致cat
关闭。
管道的工作方式是连接一个进程A的输出到B的输入端的连接可以被打破,当
因为这两种情况是如此普遍,处理已移动到C标准库。