Qual é a diferença entre pidof e pgrep?

5

Quando eu uso um desses comandos com um argumento como o nome de um processo, ambos retornam exatamente o mesmo número. Eles são os mesmos comandos? São dois comandos diferentes que fazem a mesma coisa? Um deles é um pseudônimo do outro?

pidof firefox
pgrep firefox
    
por Galaxy 16.03.2017 / 02:27

2 respostas

11

Os programas pgrep e pidof não são exatamente a mesma coisa, mas são muito semelhantes. Por exemplo:

$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1

Como você pode ver, pidof não encontrou uma correspondência para [i]ref . Isso ocorre porque pidof program retorna uma lista de todas as IDs de processo associadas a um programa chamado program . Por outro lado, pgrep re retorna uma lista de todos os IDs de processo associados a um programa cujo nome corresponde à expressão regular re .

Em suas formas mais básicas, a equivalência é na verdade:

$ pidof 'program'
$ pgrep '^program$'

Como mais um exemplo concreto, considere:

$ 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
    
por 16.03.2017 / 03:27
1

Fox mencionou que pgrep pesquisa usando expressões regulares, enquanto pidof não.

Mas pgrep também tem muito mais opções disponíveis:

  • Com -u "$UID" , você pode corresponder apenas processos pertencentes ao usuário atual.
  • Com --parent você pode encontrar os processos filhos de um determinado processo.
  • Você pode selecionar o --oldest ou --newest dos processos correspondentes.
  • ... e vários outros listados na página do manual ...

Vamos descobrir a qual pacote cada processo pertence (em sistemas apt):

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

$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep
    
por 10.05.2017 / 05:56

Tags