Чим відрізняється pidof від pgrep?


13

Коли я використовую будь-яку з цих команд з аргументом як ім'я процесу, обидві вони повертають точно таке ж число. Це однакові команди? Це дві різні команди, які роблять те саме? Чи один із них псевдонім іншому?

pidof firefox
pgrep firefox

Відповіді:


18

Програми pgrepі pidofне зовсім одне і те ж, але вони дуже схожі. Наприклад:

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

Як бачите, pidofне вдалося знайти відповідність для [i]ref. Це тому, що pidof programповертає список усіх ідентифікаторів процесів, пов'язаних з програмою, що називається program. З іншого боку, pgrep reповертає список усіх ідентифікаторів процесів, пов'язаних з програмою, ім'я якої відповідає звичайному виразу re.

У їх найбільш основних формах еквівалентність насправді:

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

Ще одним конкретним прикладом розглянемо:

$ 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

Фокс згадував, що pgrepпошук використовує регулярні вирази, поки pidofце не робить.

Але pgrepтакож доступно набагато більше варіантів:

  • З -u "$UID"вами можна співставити лише процеси, що належать поточному користувачеві.
  • З допомогою --parentвас можна знайти дочірні процеси певного процесу.
  • Ви можете обрати --oldestабо --newestвідповідні процеси.
  • ... та різні інші, перелічені на сторінці людини ...

Давайте з’ясуємо, до якого пакету належить кожен процес (у підхожих системах):

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

$ dpkg -S "$(which pgrep)"
procps: /usr/bin/pgrep
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.