管道和信号一样,也是进程通信的方式之一。匿名管道,也称为管道符(“|
”),用来把上一个命令的输出当成下一个命令的输入。使用vim pipeContent.txt
,把下边的内容
1 11
2 22
3 33
4 44
5
6
7
8
9
写到Redirect.txt
文件里边,要是不知道怎么使用vim新建文件并写入内容,可以参考我的一篇文章《Linux学习之vim在光标所在处写入内容,保存退出》。
cat pipeContent.txt
显示如上,把pipeContent.txt
所有内容都显示出来了。
cat pipeContent.txt | grep "44"
就可以只把第4行所有内容显示到标准输出上边,grep
的作用就是进行字符串匹配。
执行cat | ps -f
,可以看到17726
和17727
拥有同一个父进程。
再打开一个终端,称为B终端
,然后执行ls -l /proc/17726/fd
和ls -l /proc/17727/fd
,可以看到下边的内容。
在/proc/pid(编号)/fd
一般有以下三个链接:
0 – stdin (standard input) 标准输入
1 – stdout (standard output) 标准输出
2 – stderr (standard error) 标准错误输出
可以看到17726
的输出链接到了管道上边了。而由于进程17727
,即ps -f
已经结束了,所以无法看到/proc/17727/fd
底下的内容了。
在执行cat | ps -f
的终端按下Ctrl+c,结束命令。
需要注意的是有内置命令的话,不会传递结果给父进程,使用管道符的时候,尽量规避内置命令。
此文章为7月Day 10学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。