Respostas:
Os programas pgrepe pidofnão são exatamente a mesma coisa, mas são muito parecidos. Por exemplo:
$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1
Como você pode ver, pidofnão conseguiu encontrar uma correspondência para [i]ref. Isso ocorre porque pidof programretorna uma lista de todos os IDs de processo associados a um programa chamado program. Por outro lado, pgrep reretorna uma lista de todos os IDs de processo associados a um programa cujo nome corresponde à expressão regular re.
Nas formas mais básicas, a equivalência é realmente:
$ pidof 'program'
$ pgrep '^program$'
Como outro 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
Fox mencionou que pgreppesquisas usando expressões regulares, enquanto pidofnão.
Mas pgreptambém tem muito mais opções disponíveis:
-u "$UID"você, você pode corresponder apenas aos processos pertencentes ao usuário atual.--parentvocê pode encontrar os processos filhos de um determinado processo.--oldestou --newestdos processos correspondentes.Vamos descobrir a qual pacote cada processo pertence (nos sistemas apt):
$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof
$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep