有人可以解釋命令內部實際發生了什麼(系統調用稱爲)ls | grep 'xxx'
?流水線如何工作?
Q
流水線如何工作?
2
A
回答
2
第一個命令的標準輸出作爲標準輸入輸入到管道中的第二個命令。有幾個系統調用,您可能有興趣瞭解更多詳細信息,特別是fork(2),execve(2),pipe(2),dup2(2),read(2)和write (2)。
實際上,shell將STDIN_FILENO和STDOUT_FILENO分別設置爲管道的讀端和寫端。當流水線中的第一個進程執行寫操作(2)時,該進程的標準輸出被複製爲管道的寫端,類似地,當第二個進程對標準輸入進行讀(2)時,它最終從管道的讀取結束。
當然還有更多細節需要考慮,請查看Richard Stevens在UNIX環境下的高級編程等書籍。
3
首先,調用pipe(2,3p)
以創建具有讀寫結束的管道。然後調用fork(2,3p)
兩次,每次命令一次。然後使用dup2(2,3p)
來替換管道每端的每個分叉子節點中的相應文件描述符。最後在每個孩子中調用exec(3)
以實際運行命令。
相關問題
- 1. 流水線工作流程和變量
- 2. 無法獲得Scrapy流水線工作
- 3. Jenkins使用Groovy流水線腳本的多流水線工程
- 4. 流水線中ForEach-Object cmdlet的執行順序如何工作?
- 5. mongodb聚合框架流水線如何工作?
- 6. 如何強制流水線
- 7. Redis流水線
- 8. 在流水線
- 9. 與流水線
- 10. 流水線vs
- 11. Bitbucket流水線
- 12. 流到mysql的流水線
- 13. 如何在MailKit中啓用流水線
- 14. 如何用perl建立流水線
- 15. 如何在Redis中插入(替換)操作? (如流水線)
- 16. 裝配流水線
- 17. WebServices流水線(Springboot)
- 18. 是68HC11流水線?
- 19. 流水線功能
- 20. 並行流水線
- 21. Android HTTP流水線
- 22. 流水線架構
- 23. DataTables,Ajax流水線
- 24. CacheManager.Net - Redis流水線
- 25. 多枝流水線作業請求
- 26. 作爲原子的Redis流水線
- 27. Galleria JS不能在Rails流水線生產中工作
- 28. 爲什麼du或echo流水線不工作?
- 29. Redis客戶端如何實現流水線操作?
- 30. 與詹金斯工作流程/流水線並行運行的階段
使用'strace'來查找系統調用,例如'strace -f bash -c'ls | grep xxx'' –