pidof와 pgrep의 차이점은 무엇입니까?


13

프로세스 이름으로 이러한 명령 중 하나를 인수와 함께 사용하면 두 명령 모두 정확히 같은 숫자를 반환합니다. 그들은 같은 명령입니까? 그들은 같은 일을하는 두 개의 다른 명령입니까? 그들 중 하나가 다른 별명입니까?

pidof firefox
pgrep firefox

답변:


18

프로그램 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

4

폭스는 pgrep정규 표현식을 사용하여 검색하지만 pidof그렇지는 않다고 언급했다 .

그러나 pgrep또한 더 많은 옵션을 사용할 수 있습니다 :

  • 으로 -u "$UID"당신은 현재 사용자에 속하는 프로세스 만 일치시킬 수 있습니다.
  • 으로 --parent당신은 주어진 프로세스의 자식 프로세스를 찾을 수 있습니다.
  • --oldest또는 --newest일치하는 프로세스를 선택할 수 있습니다 .
  • ... 매뉴얼 페이지에 열거 된 다양한 것들 ...

각 프로세스가 어떤 패키지에 속하는지를 알아 봅시다 (적합한 시스템에서) :

$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof

$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.