Qual è la differenza tra pidof e pgrep?


13

Quando uso uno di questi comandi con un argomento come nome di un processo, entrambi restituiscono lo stesso numero esatto. Sono gli stessi comandi? Sono due comandi diversi che fanno la stessa cosa? Uno di questi è un alias all'altro?

pidof firefox
pgrep firefox

Risposte:


18

I programmi pgrepe pidofnon 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, pidofnon è stato possibile trovare una corrispondenza per [i]ref. Questo perché pidof programrestituisce un elenco di tutti gli ID processo associati a un programma chiamato program. D'altra parte, pgrep rerestituisce 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

4

Fox ha detto che le pgrepricerche utilizzano espressioni regolari, mentre pidofnon lo fa.

Ma pgrepha anche molte più opzioni disponibili:

  • Con -u "$UID"puoi abbinare solo i processi appartenenti all'utente corrente.
  • Con --parentte puoi trovare i processi figlio di un dato processo.
  • È possibile selezionare il --oldesto --newestdei processi corrispondenti.
  • ... e vari altri elencati nella pagina man ...

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.