linux进程通信中的管道,标准输出/错误重定向
管道pipe:
管道是linux系统提供给进程通信的一种方式,它的本质是一个缓冲区,可以想象成一个管道,A进程从管道一端输入数据,B进程在另一端接收数据,当管道缓存满的时候阻塞A进程,直到有进程将管道数据读出,此时唤醒A进程。
管道的缓存容量是系统规定的,在终端下输入:ulimit -a 如下图pipe size即为管道容量。
标准输出/错误:
程序运行过程中输出到屏幕的程序运行信息就是标准输出,相应的程序输出的错误信息就是标准错误输出,重定向('>')的时候默认重定向标准输出,对于标准错误该怎么定向呢?他们之间的区别用简单的例子区别:
执行ls命令成功,得到以下输出,即标准输出
将标准输出重定向到log文件:
执行一个错误的ls命令:
此时log文件并没有错误信息:
在linux系统中:
0代表标准输入流
1代表标准输出流
2代表标准输出流
ls >log 等于ls 1>log
依然执行上面错误的命令 ls test ,即当前目录不存在test文件,此时会有标准错误输出,
因此,可以自由决定标准输出/错误怎么输出,如:
>log 2>&1 标准输出到log,标准错误定向到标准输出,即log文件,等于>&log。
>log 2>wrong 标准输出重定向到log,标准错误重定向到wrong问件。
>&log 标准输出/错误都输出到log文件中。