Grep

grep 入侵我的ps

  • March 5, 2018

當我檢查某個程序時,我通常會寫

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

引用自:https://unix.stackexchange.com/questions/176749