pgrep は完全一致に対しては機能せず、部分一致に対してのみ機能します。なぜですか?

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個の記号で非常に短いようです。

ベストアンサー1

問題は、基本的にpgrepプロセスのみが検索されることです。名前。名前はコマンド全体の切り捨てられたバージョンです。そのプロセスのプロセスIDを見ると、名前が何であるかがわかります/proc/PID/statusPIDたとえば、

$ ./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

おすすめ記事