我在理解这些命令时遇到问题:
在终端mkfifo pipe1
和mkfifo pipe2
完成后
并执行:
$ echo -n x | cat - pipe1 > pipe2 &
我得到了结果:
[1] 3526
通过时间往往会增加的数字。
当我跑步时:
$ cat <pipe2 > pipe1
输出是:
$ echo -n x | cat - pipe1 > pipe2 &
有人可以解释发生什么事吗?
这是一个家庭作业,我们还没有看过课程;任何帮助将不胜感激。
答案 0 :(得分:5)
每个命令:
echo -n x | cat - pipe1 > pipe2 &
运行命令序列,使echo
的输出通过管道传递给cat
,但序列在后台运行。 shell会生成一条消息,例如:
[1] 3526
表示后台作业是jobid 1和进程ID 3526.由于FIFO的性质,整个子shell挂起等待某些东西打开pipe2
进行读取才能成功启动cat
操作。一旦发布,
cat
命令从标准输入中读取一个字符,然后挂起等待pipe1
的某些输入。严格地说,这意味着它等待进程打开pipe2
进行写作。
当您重复该命令时,数字会增加,因为作业编号和进程ID是唯一的。
cat pipe1
本身应该挂起。回显的命令可能来自之前的一些命令。
$ echo -n x | cat - pipe1 > pipe2 &
[1] 9304
$ (echo Hi > pipe1) &
[2] 9305
$ sleep 3
$ jobs
[1]- Running echo -n x | cat - pipe1 > pipe2 &
[2]+ Running ( echo Hi > pipe1 ) &
$ cat pipe2
-n x
Hi
[1]- Done echo -n x | cat - pipe1 > pipe2
[2]+ Done ( echo Hi > pipe1 )
$
我的shell(Korn)不会解释echo -n
与您的相同(可能是bash
)。