С чего начать Первые шаги трек · 15 ступеней
Linux Labs

pgrep — найти PID процесса по имени

4 мин Ubuntu 24.04 · procps-ng 4.0.4

Команда pgrep печатает PID процессов по имени или командной строке, владельцу и родителю — без ps и grep.

Шпаргалка

10 команд Версия для печати
  • pgrep nginx PID процессов со словом nginx в имени
  • pgrep -l nginx PID и имя
  • pgrep -a nginx PID и полная командная строка
  • pgrep -x sshd имя целиком, а не часть
  • pgrep -f 'app.py --dev' по всей командной строке
  • pgrep -u www-data -l процессы пользователя
  • pgrep -c -x nginx сколько их
  • pgrep -n python3 самый новый; -o — самый старый
  • pgrep -P 1234 -l потомки процесса 1234
  • pidof cron PID по точному имени программы

Обзор

pgrep ищет процессы и печатает их PID — по одному в строке. Образец — регулярное выражение, и по умолчанию его ищут в имени процесса, то есть в имени программы:

text
student@ubuntu:~$ pgrep -l systemd
1 systemd
322 systemd-journal
386 systemd-udevd
student@ubuntu:~$ pgrep -a cron
729 /usr/sbin/cron -f -P

Имя процесса ядро хранит не длиннее 15 знаков: systemd-journald в списке — systemd-journal. Полная командная строка с путём и аргументами доступна с -f (искать в ней) и -a (печатать её).

Себя pgrep в вывод не включает — в отличие от ps aux | grep, где строка самого grep попадает в результат. Код возврата: 0 — нашлось, 1 — ничего, 2 — ошибка в ключах. На нём строят проверки в скриптах.

Ключи

10

Отбор (-u, -P, -t, -x) сочетается: условия складываются через И. Полный список — man pgrep.

Ключ Что делает Пример
-l --list-name Печатать PID и имя процесса. pgrep -l nginx
-a --list-full Печатать PID и полную командную строку. pgrep -a nginx
-f --full Искать образец во всей командной строке, а не только в имени. pgrep -f 'app.py --dev'
-x --exact Имя (или строка с -f) должно совпасть целиком. pgrep -x sshd
-u --euid user Только процессы этого пользователя (эффективный UID). pgrep -u www-data -l
-c --count Напечатать только число найденных процессов. pgrep -c -x nginx
-n --newest Только самый новый из найденных; -o — самый старый. pgrep -n python3
-P --parent PPID Только потомки указанного родителя. pgrep -P 1234 -l
-i --ignore-case Без учёта регистра. pgrep -i -l Xorg
-d --delimiter string Разделитель между PID вместо перевода строки. pgrep -d, -x nginx

Ничего не найдено. Попробуй запрос короче.

Рецепты

4

Проверить, запущена ли программа

bash
if pgrep -x nginx >/dev/null; then echo работает; else echo нет; fi

-x требует совпадения имени целиком: без него pgrep nginx нашёл бы и nginx-exporter.

Найти скрипт, а не интерпретатор

bash
pgrep -l python3                        # все python3 — без разбора
pgrep -af '^/usr/bin/python3 /opt/app/worker.py'   # нужный скрипт

У всех Python-скриптов имя процесса одно — python3; различаются они командной строкой. Поэтому скрипты ищут через -f, а ^ в начале не даёт совпасть с чужой строкой, где путь встречается в аргументах.

Посмотреть подробности найденного

bash
ps -o pid,ppid,user,stat,etime,args -p "$(pgrep -d, -x nginx)"

-d, склеивает PID через запятую — в таком виде их принимает ps -p, см. ps.

Перед pkill — список

bash
pgrep -a -u student sleep     # кого заденет
pkill -u student sleep        # те же условия, теперь сигнал

pkill принимает те же ключи отбора, что pgrep, но посылает сигнал — см. kill.

Неполадки

4

pattern that searches for process name longer than 15 characters

Имя процесса обрезано до 15 знаков, и длинный образец не совпадёт ни с чем. Укороти его до первых 15 знаков или ищи по командной строке: pgrep -f systemd-journald.

pgrep -f находит лишний процесс

Образец встретился в чужой командной строке — например, у оболочки bash -c, которая сама запускает pgrep -f …. Привяжи образец к началу: pgrep -f '^/usr/bin/python3 /opt/app/worker.py' — или ищи по имени с -x.

pgrep ничего не печатает

Ничего не нашлось, код возврата 1. Проверь регистр (или добавь -i), имя программы в ps -e и не обрезано ли оно. Процессы других пользователей pgrep видит и без sudo.

pgrep: invalid user name

Пользователя с таким именем нет. Проверь id имя или укажи UID числом.

См. также

  • ps — подробности о процессах: колонки, состояние, родитель.
  • kill — послать сигнал найденному процессу, pkill.
  • top — какой из найденных процессов грузит систему.
  • processes — что такое процесс, имя и командная строка.
  • regex — образец pgrep — регулярное выражение.
Загрузка…