2017-06-17 65 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),並讀取(或寫入)管道。