Grep
為什麼命令 ps 不顯示整個程序列表?
如果
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=auto
和agetty
。這與 中的grep
命令匹配ps awx | grep agetty
,--color=auto
標誌可能來自某個別名。這不是一個agetty
過程。其中一個可能具有agetty
或/sbin/agetty
作為命令行的第一部分,如來自 Debian 系統的此範例:1269 tty3 Ss+ 0:00 /sbin/agetty --noclear tty3 linux