私はこれを持っています:
$ 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
書き込みプロセスが終了する前に読み取りプロセスが終了するため、そうなると思います。