Quelle est la difference entre pidof et pgrep?

13

Lorsque j'utilise l'une de ces commandes avec un argument comme nom d'un processus, les deux renvoient exactement le même nombre. S'agit-il des mêmes commandes? S'agit-il de deux commandes différentes qui font la même chose? L'un d'eux est-il un alias pour l'autre?

pidof firefox
pgrep firefox
Galaxie
la source

Réponses:

18

Les programmes pgrepet pidofne sont pas tout à fait la même chose, mais ils sont très similaires. Par exemple:

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

Comme vous pouvez le voir, pidofimpossible de trouver une correspondance pour [i]ref. En effet, pidof programrenvoie une liste de tous les ID de processus associés à un programme appelé program. En revanche, pgrep rerenvoie une liste de tous les ID de processus associés à un programme dont le nom correspond à l'expression régulière re.

Dans leurs formes les plus élémentaires, l'équivalence est en fait:

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

Comme encore un autre exemple concret, considérons:

$ 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
Renard
la source
4

Fox a mentionné que les pgreprecherches à l'aide d'expressions régulières pidofne le font pas.

Mais il pgrepy a aussi beaucoup plus d'options disponibles:

  • Avec -u "$UID"vous ne pouvez faire correspondre que les processus appartenant à l'utilisateur actuel.
  • Avec --parentvous pouvez trouver les processus enfants d'un processus donné.
  • Vous pouvez sélectionner le --oldestou --newestdes processus correspondants.
  • ... et divers autres répertoriés sur la page de manuel ...

Voyons à quel package appartient chaque processus (sur les systèmes apt):

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

$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep
joeytwiddle
la source