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