第一个终端
$ sort | sort
第一个的pid为1,第二个的pid为2。
第二个终端:
$ strace -p 1
strace: Process 1 attached
read(0,
第三个终端:
$ strace -p 2
strace: Process 2 attached
read(0,
第四终端
$ ps l
0 1000 1 6891 20 0 27464 912 wait_w S+ pts/2 0:00 sort
0 1000 2 6891 20 0 27464 924 pipe_w S+ pts/2 0:00 sort
两个sort
进程都是前台的。但是,当我在第一个终端A
上输入任何字符(strace
)时,只有第一个sort
(pid
= 1)才得到输入:>
read(0, "A\n", 130048) = 2
但是,当我通过按Ctrl-C发送SIGINT
时,两个sort
进程都收到信号。为什么?
--- SIGINT {si_signo=SIGINT, si_code=SI_TKILL, si_pid=1, si_uid=1000} ---
--- SIGINT {si_signo=SIGINT, si_code=SI_TKILL, si_pid=2, si_uid=1000} ---
答案 0 :(得分:0)
tt_content.stdWrap.dataWrap >
tt_content.stdWrap.prepend.dataWrap >
tt_content.stdWrap.innerWrap.cObject.66.10 >
必须先读取所有输入,然后才能输出任何内容(否则它将如何对所有内容进行排序?)。
由于您的第一次调用是从终端读取标准输入,因此您需要告诉终端您已经完成提供ctrl-d输入的操作。然后,它可以将所有已排序的行写入其标准输出,该输出与第二个调用的标准输入连接,然后退出,这将导致第二个sort
在读取完所有第一个{输出。