2017-06-17 63 views
0

有人可以帮我回答这个问题: 指令序列(系统调用)是什么,它允许bash进程解释并执行命令 p1 | p2,p1和p2是两个可执行文件。Bash代码执行p1 | p2

+1

下一次尝试谷歌:https://unix.stackexchange.com/questions/37508/in-what-order-do-piped-commands-run,“|”被称为管道! –

+0

我确切地知道什么|意味着如何在Linux中使用管道。 – Emy

+0

我的问题是关于由bash执行的指令执行命令 – Emy

回答

0

这看起来像一个很好的解释:https://brandonwamboldt.ca/how-linux-pipes-work-under-the-hood-1518/

TL; DR:

  1. 主进程(例如bash)的创建使用pipe()系统调用,它返回存储在​​两个文件描述符的管。

  2. 然后它(bash)fork() s并为每个程序创建两个子进程。

  3. 在每个子进程中,使用dup2(pipefd[READ-or-WRITE],stdinorout)修改的标准输入或输出文件描述符(管道)。

  4. 最后,在子进程中执行所需程序(p1p2),并读取(或写入)管道。