Grep
grep 入侵我的ps
當我檢查某個程序時,我通常會寫
ps aux | grep myprocess
有時我得到的輸出
eimantas 11998 0.0 0.0 8816 740 pts/0 S+ 07:45 0:00 grep myprocess
如果程序沒有執行。
現在我真的想知道如果 grep 在執行後過濾掉
ps
命令的輸出,為什麼它會出現在程序列表中?ps
這種行為是完全正常的,這是由於 bash 如何管理管道使用。
pipe 是由 bash 使用
pipe
系統呼叫實現的。在該呼叫之後,bash 將標準輸入(文件描述符 0)分叉並替換為來自正確程序(grep
)的輸入。主 bash 程序創建另一個 fork 並傳遞 fifo 的輸出描述符來代替標準輸入(文件描述 1)並啟動 left 命令。該
ps
實用程序在grep
命令之後啟動,因此您可以在輸出中看到它。如果您不相信它,您可以使用
set -x
來啟用命令跟踪。例如:+ ps aux + grep --color=auto grep + grep --color=auto systemd alexises 1094 0.0 0.8 6212 2196 pts/0 S+ 09:30 0:00 grep --color=auto systemd
有關更多說明,您可以查看基本 c shell 的這一部分:http ://www.cs.loyola.edu/~jglenn/702/S2005/Examples/dup2.html