Команда pgrep в Linux
Полное руководство по командам Linux
pgrep — очень практичный инструмент поиска процессов в системах Linux, входящий в пакет procps или procps-ng. Название этой команды происходит от «process grep». Как следует из названия, она может искать процессы в системе так же, как команда grep ищет текст.
Основная функция pgrep — находить запущенные процессы по заданным условиям и возвращать PID (идентификаторы процессов) этих процессов. По сравнению с традиционным подходом, сочетающим команду ps с grep, pgrep более краток и эффективен.
Базовый синтаксис pgrep
Базовый формат синтаксиса команды pgrep выглядит следующим образом:
pgrep [选项] [匹配模式]
Где:
Options: различные опции, используемые для указания условий поиска или формата выводаMatch Mode: шаблон регулярного выражения, используемый для сопоставления имён процессов
Общие параметры
pgrep предоставляет множество опций для точного управления поведением поиска. Вот распространённые опции:
| Опция | Описание |
|---|---|
-l |
Отображать как имя процесса, так и PID |
-a |
Отображать полную командную строку, а не только имя процесса |
-f |
Сопоставлять полную командную строку (включая аргументы), а не только имя процесса |
-u |
Сопоставлять только процессы, принадлежащие указанному пользователю |
-x |
Точно сопоставлять всё имя процесса |
-n |
Отображать только самый новый (запущенный последним) соответствующий процесс |
-o |
Отображать только самый старый (запущенный раньше всех) соответствующий процесс |
-c |
Возвращать только количество совпадающих процессов без отображения PIDs |
-d |
Указать разделитель вывода (по умолчанию — символ новой строки) |
-P |
Сопоставлять только дочерние процессы указанного ID родительского процесса |
-g |
Сопоставлять только процессы с указанным ID группы процессов |
-t |
Сопоставлять только процессы на указанном терминале (tty) |
Примеры использования
Базовый поиск процессов
Найти все процессы с именем "nginx":
pgrep nginx
Эта команда возвращает ID процессов всех процессов, имя которых содержит "nginx".
Отобразить имя процесса
Найти процесс "ssh" и отобразить его имя процесса:
pgrep -l ssh
Пример вывода:
1234 sshd 5678 ssh-agent
Точное совпадение имени процесса
Сопоставлять только процессы с точным именем "bash" (исключая "bashrc" и подобные):
pgrep -x bash
Сопоставление полной командной строки
Поиск процессов, содержащих определённые аргументы, например, поиск процессов sshd, использующих определённый порт:
pgrep -f "sshd -p 2222"
Фильтрация по пользователю
Поиск всех процессов, запущенных пользователем "www-data":
pgrep -u www-data
Поиск по комбинированному условию
Поиск процессов с именем "mysqld", запущенных пользователем "mysql":
pgrep -u mysql mysqld
Подсчёт процессов
Подсчёт количества запущенных процессов "chrome":
pgrep -c chrome
Поиск самого нового/самого старого процесса
Поиск самого недавно запущенного процесса "python":
pgrep -n python
Поиск самого раннего запущенного процесса "python":
pgrep -o python
Продвинутое использование
Использование с pkill
pgrep часто используется вместе с командой pkill. Сначала можно использовать pgrep, чтобы просмотреть процессы, которые будут завершены, а после подтверждения, что они правильные, использовать pkill:
Пример
pgrep -l apache2
# Завершите эти процессы после подтверждения
pkill apache2
Пользовательский разделитель
По умолчанию pgrep использует символы новой строки для разделения нескольких PID. Можно изменить его, чтобы использовать запятые:
pgrep -d, nginx
Пример вывода:
1234,5678,9012
Поиск процессов на определённом терминале
Найти все процессы, выполняющиеся на терминале tty1:
pgrep -t tty1
Поиск дочерних процессов
Найти все дочерние процессы процесса с PID 1234:
pgrep -P 1234
ЧАВО
В чём разница между pgrep и ps | grep?
- Эффективность: pgrep напрямую запрашивает информацию о процессах ядра, что делает его более эффективным, чем ps | grep
- Безопасность: pgrep не находит собственный процесс, тогда как ps | grep может найти сам процесс grep
- Возможности: pgrep предоставляет более специализированные параметры поиска процессов
Почему pgrep иногда не может найти процесс, который, как я знаю, запущен?
Возможные причины:
- Имя процесса написано с ошибкой
- Не используется
-fопция для сопоставления с полной командной строкой - Процесс принадлежит другому пользователю, и у вас недостаточно прав для его просмотра
- Процесс уже завершился
Как проверить версию pgrep?
pgrep -V
Практические примеры использования
Мониторинг состояния службы
Проверить, запущена ли служба, в скрипте:
Пример
echo "Nginx работает"
else
echo "Nginx не работает"
fi
Пакетные операции над процессами
Получите PID всех Java-процессов и выполните операции:
Пример
echo "Обработка Java-процесса $pid"
# Другие операции...
done
Мониторинг системных ресурсов
Подсчитайте количество и использование ресурсов для конкретных типов процессов:
Пример
memory=$(ps -o rss= -p $(pgrep chrome) | awk '{sum+=$1} END {print sum}')
echo "Процессы Chrome: $count, Общая память: ${memory}KB"
Итог
pgrep — мощный и эффективный инструмент в системном администрировании Linux. Он упрощает поиск процессов и операции управления. Освоив различные параметры и варианты использования pgrep, вы можете:
- Быстро и точно находить конкретные процессы
- Писать более надёжные сценарии системного администрирования
- Повысить эффективность повседневной работы по обслуживанию системы
Помните, что после использования pgrep для поиска процессов, особенно когда вы собираетесь завершить процессы, всегда убеждайтесь, что найденные процессы — те, которые нужны, чтобы случайно не завершить важные службы.
Другие расширения