Respuestas:
Los programas pgrep
y pidof
no 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, pidof
no se pudo encontrar una coincidencia para [i]ref
. Esto se debe a que pidof program
devuelve una lista de todos los ID de proceso asociados con un programa llamado program
. Por otro lado, pgrep re
devuelve 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
Fox ha mencionado que las pgrep
búsquedas usan expresiones regulares, mientras pidof
que no.
Pero pgrep
también tiene muchas más opciones disponibles:
-u "$UID"
usted puede coincidir solo los procesos que pertenecen al usuario actual.--parent
usted puede encontrar los procesos secundarios de un proceso dado.--oldest
o --newest
de los procesos coincidentes.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