Проверить, запущена ли программа
-x требует совпадения имени целиком: без него pgrep nginx нашёл бы и
nginx-exporter.
Команда pgrep печатает PID процессов по имени или командной строке, владельцу и родителю — без ps и grep.
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 — по одному в строке. Образец — регулярное
выражение, и по умолчанию его ищут в имени процесса, то есть в имени программы:
Имя процесса ядро хранит не длиннее 15 знаков: systemd-journald в списке —
systemd-journal. Полная командная строка с путём и аргументами доступна с -f
(искать в ней) и -a (печатать её).
Себя pgrep в вывод не включает — в отличие от ps aux | grep, где строка самого
grep попадает в результат. Код возврата: 0 — нашлось, 1 — ничего, 2 —
ошибка в ключах. На нём строят проверки в скриптах.
Отбор (-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 |
Ничего не найдено. Попробуй запрос короче.
-x требует совпадения имени целиком: без него pgrep nginx нашёл бы и
nginx-exporter.
У всех Python-скриптов имя процесса одно — python3; различаются они командной
строкой. Поэтому скрипты ищут через -f, а ^ в начале не даёт совпасть с
чужой строкой, где путь встречается в аргументах.
-d, склеивает PID через запятую — в таком виде их принимает ps -p, см. ps.
pkill принимает те же ключи отбора, что pgrep, но посылает сигнал — см.
kill.
Имя процесса обрезано до 15 знаков, и длинный образец не совпадёт ни с чем.
Укороти его до первых 15 знаков или ищи по командной строке: pgrep -f
systemd-journald.
Образец встретился в чужой командной строке — например, у оболочки bash -c,
которая сама запускает pgrep -f …. Привяжи образец к началу: pgrep -f
'^/usr/bin/python3 /opt/app/worker.py' — или ищи по имени с -x.
Ничего не нашлось, код возврата 1. Проверь регистр (или добавь -i), имя
программы в ps -e и не обрезано ли оно. Процессы других пользователей pgrep
видит и без sudo.
Пользователя с таким именем нет. Проверь id имя или укажи UID числом.
Есть неточность? Сообщить об ошибке в статье