Apa perbedaan antara pidof dan pgrep?

13

Ketika saya menggunakan salah satu dari perintah ini dengan argumen sebagai nama proses, keduanya mengembalikan nomor yang sama persis. Apakah mereka perintah yang sama? Apakah mereka dua perintah berbeda yang melakukan hal yang sama? Apakah salah satunya adalah alias ke yang lain?

pidof firefox
pgrep firefox
Galaksi
sumber

Jawaban:

18

Program pgrepdan pidofbukan hal yang persis sama, tetapi mereka sangat mirip. Sebagai contoh:

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

Seperti yang Anda lihat, pidofgagal menemukan kecocokan untuk [i]ref. Ini karena pidof programmengembalikan daftar semua ID proses yang terkait dengan program yang disebut program. Di sisi lain, pgrep remengembalikan daftar semua ID proses yang terkait dengan program yang namanya cocok dengan ekspresi reguler re.

Dalam bentuk paling dasar mereka, kesetaraan sebenarnya adalah:

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

Sebagai contoh konkret lainnya, pertimbangkan:

$ 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
Rubah
sumber
4

Fox telah menyebutkan bahwa pgreppencarian menggunakan ekspresi reguler, sementara pidoftidak.

Tetapi pgrepjuga memiliki lebih banyak opsi yang tersedia:

  • Dengan -u "$UID"Anda hanya dapat mencocokkan proses milik pengguna saat ini.
  • Dengan --parentAnda dapat menemukan proses anak dari proses yang diberikan.
  • Anda dapat memilih --oldestatau --newestdari proses yang cocok.
  • ... dan berbagai lainnya yang tercantum di halaman manual ...

Mari kita cari tahu paket mana dari setiap proses (pada sistem apt):

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

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