我有这个:
$ ls -lh file
-rw-r--r-- 1 ankur root 181M Sep 23 20:09 file
$ head -6 file
z
abc
abc
abc
abc
abc
$ cat file | grep -m 1 z
z
问题:
为什么cat
最后一行的命令行不会因 SIGPIPE 而过早死亡?我认为这应该发生,因为与猫 183MB 的文件grep
相比,它会立即终止。cat file
随着读取过程的消失cat
,将尝试写入损坏的管道,并且应该与 SIGPIPE 一起死亡。
更新:
我最终写了这个:readstdin.c
# include <unistd.h>
# include <stdio.h>
int main() {
ssize_t n ;
char a[5];
n = read(0, a, 3);
printf("read %zd bytes\n", n);
return(0);
}
我这样使用它:
$ cat file | ./readstdin
$ yes | ./readstdin
但仍然cat
或yes
不会过早死亡。我希望它是因为阅读过程在写入过程完成写入之前终止。