読者です 読者をやめる 読者になる 読者になる

pgrepの-xオプション指定時はコマンド名が15文字以内でないと検索できない件

pgrepの正規表現オプション"-x"であるが、これを指定するとコマンド名が15文字である必要がある。
pgrep -x とすると ^(コマンド名)$ (regcomp()に渡す文字列なのでおそらく文字列中の括弧は正規表現のグルーピングでなく純粋に"(",")"という文字として扱うはず)という正規表現となるようだ(pgrep.c)。

$ which pgrep
/usr/bin/pgrep
$ rpm -qf /usr/bin/pgrep
procps-3.2.8-25.el6.x86_64
$ wget ftp://rpmfind.net/linux/sourceforge/f/fu/fuduntu/sources/procps-3.2.8-15.fc14.src.rpm
$ mkdir procps
$ cd procps
$ rpm2 cpio ../procps-3.2.8-15.fc14.src.rpm | cpio -i
$ zcat procps-3.2.8.tar.gz | tar xvof -
$ cd procps-3.2.8
$ vi pgrep.c

do_regcomp()401行付近
            sprintf (re, "^(%s)$", opt_pattern);

正規表現の検索対象はどうも、/proc/プロセスID/statというファイルの第二フィールドのようで、そこに先頭15文字までしか書かれていないためだと思われる。