¿Cuál es la diferencia entre pidof y pgrep?

13

Cuando uso cualquiera de estos comandos con un argumento como nombre de un proceso, ambos devuelven exactamente el mismo número. ¿Son los mismos comandos? ¿Son dos comandos diferentes que hacen lo mismo? ¿Uno de ellos es un alias del otro?

pidof firefox
pgrep firefox
Galaxia
fuente

Respuestas:

18

Los programas pgrepy pidofno son exactamente lo mismo, pero son muy similares. Por ejemplo:

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

Como puede ver, pidofno se pudo encontrar una coincidencia para [i]ref. Esto se debe a que pidof programdevuelve una lista de todos los ID de proceso asociados con un programa llamado program. Por otro lado, pgrep redevuelve una lista de todos los ID de proceso asociados con un programa cuyo nombre coincide con la expresión regular re.

En sus formas más básicas, la equivalencia es en realidad:

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

Como otro ejemplo 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
zorro
fuente
4

Fox ha mencionado que las pgrepbúsquedas usan expresiones regulares, mientras pidofque no.

Pero pgreptambién tiene muchas más opciones disponibles:

  • Con -u "$UID"usted puede coincidir solo los procesos que pertenecen al usuario actual.
  • Con --parentusted puede encontrar los procesos secundarios de un proceso dado.
  • Puede seleccionar el --oldesto --newestde los procesos coincidentes.
  • ... y varios otros enumerados en la página del manual ...

Veamos a qué paquete pertenece cada proceso (en sistemas apt):

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

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