Grep

為什麼命令 ps 不顯示整個程序列表?

  • January 29, 2019

如果ps awx | grep -v grep執行該命令,則會產生以下輸出。下面的列表是完整輸出的最後 20 行。

4247 pts/1    Ss+    0:00 /bin/bash
4442 ?        S<     0:00 [kworker/u17:1]
4661 ?        S<     0:00 [kworker/u17:3]
4731 ?        S<     0:00 [kworker/u17:5]
4734 ?        S      0:00 pickup -l -t fifo -u
4847 ?        S<     0:00 [kworker/u17:7]
4850 ?        S      0:00 [kworker/u16:3]
4878 ?        S      0:00 [kworker/u16:0]
5201 ?        S<     0:00 [kworker/u17:8]
5353 ?        S      0:00 [kworker/0:1]
5354 ?        S      0:00 [kworker/7:2]
5355 ?        S      0:00 [kworker/u16:2]
5361 ?        S      0:00 [kworker/4:0]
5362 tty1     Ss     0:00 -bash
5396 ?        S      0:00 [kworker/6:0]
5418 ?        S      0:00 [kworker/0:0]
5420 ?        S      0:00 [kworker/2:2]
5431 ?        S      0:00 [kworker/7:0]
5562 ?        S      0:00 [kworker/4:2]
5620 tty1     R+     0:00 ps awx

如果執行後續命令ps awx | grep grep,則會生成以下輸出。

5646 tty1     S+     0:00 grep --color=auto grep

此外,如果ps awx | grep agetty執行以下命令,則會顯示以下輸出。

5669 tty1     S+     0:00 grep --color=auto agetty

為什麼命令ps awx不顯示程序標識號 5646 和 5669?事實上,在 5620 之後沒有列出其他程序。

為什麼命令 ps awx 不顯示程序標識號 5646 和 5669?

因為您只是5646作為命令的一部分開始的ps awx | grep grep,並且5669作為ps awx | grep agetty命令的一部分。它們是在初始列表之後開始的,因此在其中不可見。兩者都執行,直到它們處理了該特定管道中流程的輸入ps,因此它們在以後的任何列表中都不會可見。

同樣,如果您ps重複執行,您會看到程序 id 發生變化:每次執行命令時,都會啟動一個新程序。


更具體地說,第二個過程是這樣的:

5669 tty1     S+     0:00 grep --color=auto agetty

這是grep,已給出參數--color=autoagetty。這與 中的grep命令匹配ps awx | grep agetty--color=auto標誌可能來自某個別名。這不是一個agetty過程。其中一個可能具有agetty/sbin/agetty作為命令行的第一部分,如來自 Debian 系統的此範例:

1269 tty3     Ss+    0:00 /sbin/agetty --noclear tty3 linux

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