Команда 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?

  1. Эффективность: pgrep напрямую запрашивает информацию о процессах ядра, что делает его более эффективным, чем ps | grep
  2. Безопасность: pgrep не находит собственный процесс, тогда как ps | grep может найти сам процесс grep
  3. Возможности: pgrep предоставляет более специализированные параметры поиска процессов

Почему pgrep иногда не может найти процесс, который, как я знаю, запущен?

Возможные причины:

  1. Имя процесса написано с ошибкой
  2. Не используется-fопция для сопоставления с полной командной строкой
  3. Процесс принадлежит другому пользователю, и у вас недостаточно прав для его просмотра
  4. Процесс уже завершился

Как проверить версию pgrep?

pgrep -V

Практические примеры использования

Мониторинг состояния службы

Проверить, запущена ли служба, в скрипте:

Пример

if pgrep -x "nginx" >/dev/null; затем
    echo "Nginx работает"
else
    echo "Nginx не работает"
fi

Пакетные операции над процессами

Получите PID всех Java-процессов и выполните операции:

Пример

for pid in $(pgrep java); do
    echo "Обработка Java-процесса $pid"
    # Другие операции...
done

Мониторинг системных ресурсов

Подсчитайте количество и использование ресурсов для конкретных типов процессов:

Пример

count=$(pgrep -c chrome)
memory=$(ps -o rss= -p $(pgrep chrome) | awk '{sum+=$1} END {print sum}')
echo "Процессы Chrome: $count, Общая память: ${memory}KB"

Итог

pgrep — мощный и эффективный инструмент в системном администрировании Linux. Он упрощает поиск процессов и операции управления. Освоив различные параметры и варианты использования pgrep, вы можете:

  1. Быстро и точно находить конкретные процессы
  2. Писать более надёжные сценарии системного администрирования
  3. Повысить эффективность повседневной работы по обслуживанию системы

Помните, что после использования pgrep для поиска процессов, особенно когда вы собираетесь завершить процессы, всегда убеждайтесь, что найденные процессы — те, которые нужны, чтобы случайно не завершить важные службы.


Полное руководство по командам Linux

Другие расширения