当我通过管道输出时,会发生什么

  • 本文关键字:管道 输出 bash
  • 更新时间 :
  • 英文 :


Bash中的管道获取一个进程的标准输出并传递它作为另一过程的标准输入。Bash脚本支持可以在命令行中传递的位置参数。

我使用的是Linux命令,管道总是出现。管道传输一个过程的标准输出意味着什么?我知道输出将被发送到管道中的下一个命令,但如何发送?它究竟是怎么发生的?为什么在子shell中创建的变量没有管道?

管道传输一个进程的标准输出意味着什么?

表示执行pipe系统调用。然后,fork一个进程,执行dup2系统调用,将代表标准输出流的文件描述符复制到pipe返回的文件描述符之一。然后,fork第二个过程,执行相同的dup2,但使用标准输出文件描述符和pipe返回的另一个文件描述符。

但如何?它究竟是怎么发生的?

从一个进程对pipe系统调用返回的一个文件描述符调用write系统调用,它执行管道的处理程序,即内核函数,从用户空间进程获取缓冲区的内容,并将其放置在循环保持缓冲区中。

当其他进程对pipe系统调用返回的其他文件描述符执行read系统调用时,内核函数从管道循环保持缓冲区读取元素,并将数据复制到用户给定的缓冲区,并推进保持缓冲区。

我可以通过管道传输变量的内容吗?你能在回答中包括这一点吗?

您可以执行一个进程,write将变量的内容转换为标准输出,并将该进程连接到管道。即echo "$var" |