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

관련 정보