Ps
pgrep 完全匹配不起作用,只有部分,為什麼?
我使用 procps-3.3.10 中的 pgrep。
如果我有執行檔
aout_abcdefgh_ver27
,那麼pgrep aout_abcdefgh_ver27
什麼都不返回,而
ps aux | grep aout_abcdefgh_ver27
返回預期的結果:ps aux | grep aout_abcdefgh_ver27 evgeniy 14806 0.0 0.0 4016 672 pts/8 S 12:50 0:00 ./aout_abcdefgh_ver27 evgeniy 15241 0.0 0.0 12596 2264 pts/8 S+ 12:50 0:00 grep --colour=auto aout_abcdefgh_ver27
但如果我跑
$ pgrep aout_abcdefgh_v 14806
pgrep
返回我所期望的,所以我想知道為什麼它以如此奇怪的方式工作,也許我應該使用一些選項pgrep
來使用完整的程序名稱?看起來它對模式的限制非常短,大約 10 個符號。
問題是預設情況下,
pgrep
只搜尋程序名稱。該名稱是整個命令的截斷版本。您可以通過查看相關程序的程序 ID在/proc/PID/status
哪裡來查看名稱。PID
例如:$ ./aout_abcdefgh_ver27 & [1] 14255 ## this is the PID $ grep Name /proc/14255/status Name: aout_abcdefgh_v
所以是的,
pgrep
沒有標誌只讀取執行檔名稱的前 15 個字元。要搜尋用於啟動它的完整命令行,您需要-f
標誌(來自man pgrep
):-f, --full The pattern is normally only matched against the process name. When -f is set, the full command line is used.
所以,如果你使用
-f
:$ pgrep -f aout_abcdefgh_ver27 14255