Risposte:
I programmi pgrep
e pidof
non sono esattamente la stessa cosa, ma sono molto simili. Per esempio:
$ pidof 'firefox'
5696
$ pgrep '[i]ref'
5696
$ pidof '[i]ref'
$ printf '%s\n' "$?"
1
Come puoi vedere, pidof
non è stato possibile trovare una corrispondenza per [i]ref
. Questo perché pidof program
restituisce un elenco di tutti gli ID processo associati a un programma chiamato program
. D'altra parte, pgrep re
restituisce un elenco di tutti gli ID processo associati a un programma il cui nome corrisponde all'espressione regolare re
.
Nelle loro forme più elementari, l'equivalenza è in realtà:
$ pidof 'program'
$ pgrep '^program$'
Come ennesimo esempio concreto, considera:
$ 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 detto che le pgrep
ricerche utilizzano espressioni regolari, mentre pidof
non lo fa.
Ma pgrep
ha anche molte più opzioni disponibili:
-u "$UID"
puoi abbinare solo i processi appartenenti all'utente corrente.--parent
te puoi trovare i processi figlio di un dato processo.--oldest
o --newest
dei processi corrispondenti.Scopriamo a quale pacchetto appartiene ciascun processo (su sistemi apt):
$ dpkg -S "$(which pidof)"
sysvinit-utils: /bin/pidof
$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep