답변:
프로그램 pgrep
과는 pidof
확실히 같은 것이 아니다,하지만 그들은 매우 유사합니다. 예를 들면 다음과 같습니다.
$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1
보시다시피 pidof
에 일치하는 항목을 찾지 못했습니다 [i]ref
. 이는 pidof program
라는 프로그램과 관련된 모든 프로세스 ID 목록을 반환 하기 때문 program
입니다. 반면에 pgrep re
이름이 정규식과 일치하는 프로그램과 연관된 모든 프로세스 ID 목록을 리턴합니다 re
.
가장 기본적인 형태에서 동등성은 실제로 다음과 같습니다.
$ pidof 'program'
$ pgrep '^program$'
또 다른 구체적인 예로, 다음을 고려하십시오.
$ ps ax | grep '[w]atch'
12 ? S 0:04 [watchdog/0]
15 ? S 0:04 [watchdog/1]
33 ? S< 0:00 [watchdogd]
18451 pts/5 S+ 0:02 watch -n600 tail log-file
$ pgrep watch
12
15
33
18451
$ pidof watch
18451
폭스는 pgrep
정규 표현식을 사용하여 검색하지만 pidof
그렇지는 않다고 언급했다 .
그러나 pgrep
또한 더 많은 옵션을 사용할 수 있습니다 :
-u "$UID"
당신은 현재 사용자에 속하는 프로세스 만 일치시킬 수 있습니다.--parent
당신은 주어진 프로세스의 자식 프로세스를 찾을 수 있습니다.--oldest
또는 --newest
일치하는 프로세스를 선택할 수 있습니다 .각 프로세스가 어떤 패키지에 속하는지를 알아 봅시다 (적합한 시스템에서) :
$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof
$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep