![pgrep은 전체 일치에 대해서는 작동하지 않고 부분 일치에만 작동합니다. 이유는 무엇입니까?](https://linux55.com/image/84654/pgrep%EC%9D%80%20%EC%A0%84%EC%B2%B4%20%EC%9D%BC%EC%B9%98%EC%97%90%20%EB%8C%80%ED%95%B4%EC%84%9C%EB%8A%94%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EB%B6%80%EB%B6%84%20%EC%9D%BC%EC%B9%98%EC%97%90%EB%A7%8C%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4.%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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