Ключевым атрибутом процесса является его идентификатор или PID. С помощью идентификатора можно манипулировать процессом. Команда pgrep позволяет найти идентификатор процесса и некоторую дополнительную информацию по определенному шаблону:
pgrep [options] шаблон
В качестве обязательного параметра команда принимает шаблон, которому должен соответствовать процесс. А параметр options указывает, как интерпретировать/применять этот шаблон.
Приведу основные опции, которые может принимать команда:
-l, --list-name
: выводит список идентификаторов и имя команды
-a, --list-full
: выводит список идентификаторов и полное имя команды
-v, --inverse
: ищет все процессы, которые НЕ соответствуют шаблону
-c, --count
: выводит количество процессов, которые соответствуют шаблону
-f, --full
: использует полное имя процесса
-i, --ignore-case
: при соответствии шаблону не учитывается регистр
-n, --newest
: выбирает наиболее новые процессы
-o, --oldest
: выбирает наиболее старые процессы
-O, --older <seconds>
: выбирает процессы, которые запущены как минимум seconds секунд назад
-P, --parent <PPID,...>
: выбирает только дочерние процессы определенного родительского процесса с идентификаторомPPID
-u, --euid <ID,...>
: выбирает процессы по определенному пользователю
-x, --exact
: устанавливает точное соответствие имени команды
Например, выведем идентификаторы всех процессов, для запуска которых применялась команда "gnome-shell":
eugene@Eugene:~$ pgrep gnome-shell 2645 2819 eugene@Eugene:~$
Идентификаторы всех процессов, связанных с браузером Google Chrome:
eugene@Eugene:~$ pgrep chrome 3822 10848 10857 10859 10865 10866 10868 10892 10893 10904 10940 10941 11018 eugene@Eugene:~$
Теперь выведем идентификаторы всех процессов, у которых команда содержит "gnome":
eugene@Eugene:~$ pgrep *gnome* 2418 2520 2599 2621 2645 2819 3581
В данном случае зведочка * в шаблоне указывает на произвольное количество произвольных символов. То есть шаблон "*gnome*" будет соответствовать, например, строке "gnome-shell" или "gnome-terminal-"
Или выведем все процессы с командами, которые содержат "gnome":
eugene@Eugene:~$ pgrep -l *gnome* 2418 gnome-keyring-d 2520 gnome-session-b 2599 gnome-session-c 2621 gnome-session-b 2645 gnome-shell 2819 gnome-shell-cal 3581 gnome-terminal- eugene@Eugene:~$
Или выведем с полным именем команды:
eugene@Eugene:~$ pgrep -a *gnome* 2418 /usr/bin/gnome-keyring-daemon --foreground --components=pkcs11,secrets --control-directory=/run/user/1000/keyring 2520 /usr/libexec/gnome-session-binary --session=ubuntu 2599 /usr/libexec/gnome-session-ctl --monitor 2621 /usr/libexec/gnome-session-binary --systemd-service --session=ubuntu 2645 /usr/bin/gnome-shell 2819 /usr/libexec/gnome-shell-calendar-server 3581 /usr/libexec/gnome-terminal-server eugene@Eugene:~$
Получим количество подобных процессов:
eugene@Eugene:~$ pgrep -c *gnome* 7 eugene@Eugene:~$
И еще один пример - выберем процессы по пользователю (в моем случае по пользователю eugene):
eugene@Eugene:~$ pgrep -l -u eugene 2383 systemd 2388 (sd-pam) 2395 pipewire 2396 pipewire 2402 ubuntu-report 2403 wireplumber 2415 pipewire-pulse 2418 gnome-keyring-d 2419 dbus-daemon 2470 xdg-document-po 2474 xdg-permission- 2514 gdm-wayland-ses 2520 gnome-session-b 2571 gcr-ssh-agent 2599 gnome-session-c 2613 gvfsd 2621 gnome-session-b 2644 at-spi-bus-laun 2645 gnome-shell 2653 dbus-daemon 2819 gnome-shell-cal
Стоит отметить, что идентификаторы процессов по имени команды мы также можем получить с помощью команды pidof:
eugene@Eugene:~$ pidof chrome 12459 12362 12359 12343 12331 12329 12305 12303 12302 12285
Команде pidof передается точное имя процесса.