Руководство по управлению процессами Linux с помощью 'ps' и 'kill'

Освойте основные навыки системного администрирования Linux, научившись управлять запущенными приложениями с помощью `ps` и `kill`. В этом руководстве подробно описано, как использовать `ps` для проверки идентификаторов процессов (PID), использования ресурсов и их состояний, а также как использовать `kill` для отправки определенных сигналов — от корректного завершения (SIGTERM) до принудительного прерывания (SIGKILL) — обеспечивая стабильную и контролируемую работу системы.

32 просмотров

Руководство по управлению процессами Linux с помощью команд 'ps' и 'kill'

Управление процессами является фундаментальным аспектом эффективного администрирования систем Linux. Когда приложения перестают отвечать, потребляют чрезмерные ресурсы или требуют корректного перезапуска, крайне важно знать, как их идентифицировать и взаимодействовать с ними. Это руководство служит всеобъемлющим введением в основу управления процессами в Linux: команда ps для просмотра состояний процессов и команда kill для отправки сигналов с целью управления их жизненным циклом.

Понимание того, как Linux обрабатывает запущенные программы — каждой из которых присваивается уникальный идентификатор процесса (PID) — позволяет администраторам поддерживать стабильность системы, устранять узкие места производительности и обеспечивать ожидаемую работу служб. Мы рассмотрим основной синтаксис и распространённые флаги, которые делают эти команды незаменимыми инструментами в арсенале любого системного администратора.

Модель процессов Linux: PID и состояния

В Linux каждая запущенная программа, служба или задача рассматривается как процесс. Каждый процесс уникально идентифицируется идентификатором процесса (PID) — положительным целым числом, присваиваемым ядром при создании. Этот PID является основным способом, которым системные инструменты ссылаются на определённый процесс и манипулируют им.

Процессы переходят через различные состояния (например, Работает, Спит, Остановлен, Зомби). Знание состояния может сразу же подсказать шаги по устранению неполадок.

Просмотр процессов с помощью команды ps

Команда ps (статус процесса) используется для отображения информации о текущих запущенных процессах. Поскольку вывод может быть обширным, используются различные параметры для выбора процессов, которые нужно отобразить, и столбцов информации, которые нужно включить.

Основной синтаксис и флаги ps

Существует два основных стиля флагов ps: стиль Unix (с префиксом -) и стиль BSD (без префикса). Современная практика часто предпочитает комбинирование флагов в стиле Unix для получения всеобъемлющих представлений.

1. Просмотр всех процессов (стиль BSD)

Самая распространённая команда для обзора системы — ps aux.

  • a: Показывать процессы для всех пользователей.
  • u: Отображать процессы в ориентированном на пользователя формате (показывая пользователя, использование ЦП, использование памяти и т. д.).
  • x: Включать процессы, не имеющие управляющего терминала (например, фоновые демоны).
ps aux

2. Просмотр процессов в стандартном формате (стиль UNIX)

Команда ps -ef предоставляет полный список в старом, но всё ещё широко используемом формате.

  • -e: Выбрать все процессы.
  • -f: Отобразить полный формат списка (включая PPID и аргументы команды).
ps -ef

Интерпретация ключевых столбцов вывода

Независимо от используемых флагов, определённые столбцы критически важны для управления процессами:

Столбец Описание
PID Идентификатор процесса (уникальный идентификатор)
PPID Идентификатор родительского процесса (PID процесса, который запустил данный)
USER Пользователь, которому принадлежит процесс
%CPU Процент использования времени ЦП
%MEM Процент использования физической памяти
VSZ Размер виртуальной памяти (в КиБ)
RSS Размер резидентного набора (используемая физическая память, в КиБ)
STAT Текущее состояние процесса (например, R=Работает, S=Спит, Z=Зомби)
COMMAND Команда, которая запустила процесс

Фильтрация процессов с помощью grep

Для поиска конкретного процесса стандартной практикой является передача вывода ps команде grep.

Пример: Поиск всех запущенных экземпляров веб-сервера Apache (httpd):

ps aux | grep httpd

Совет: При использовании ps | grep вы часто будете видеть саму команду grep в выводе. Чтобы отфильтровать её, используйте нотацию скобок в шаблоне поиска:
bash ps aux | grep '[h]ttpd'

Управление процессами с помощью команды kill

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

Понимание сигналов

Сигналы — это стандартизированные числовые или мнемонические коды. Вы можете перечислить доступные сигналы с помощью kill -l.

Имя сигнала Номер сигнала Описание
SIGTERM 15 Сигнал завершения по умолчанию. Просит процесс корректно завершить работу.
SIGKILL 9 Сигнал немедленного, принудительного завершения. Процесс не может его игнорировать.
SIGHUP 1 Сигнал отбоя (hangup), часто используется демонами для перечитывания файлов конфигурации.
SIGSTOP 19 Останавливает (приостанавливает) процесс, не завершая его.
SIGCONT 18 Возобновляет остановленный процесс.

Отправка сигналов с помощью kill

Базовый синтаксис команды kill:

kill -SIGNAL PID

1. Корректное завершение (лучшая практика)

Всегда сначала пытайтесь корректно завершить процесс с помощью SIGTERM (сигнал 15). Это даёт приложению время для сохранения данных и закрытия соединений.

kill 12345  # По умолчанию используется SIGTERM (15)
# ИЛИ
kill -15 12345

2. Принудительное завершение (крайняя мера)

Если процесс не отвечает и игнорирует SIGTERM, используйте SIGKILL (сигнал 9). Это мгновенно останавливает процесс, без очистки, что потенциально может привести к потере или повреждению данных в некоторых приложениях.

kill -9 12345

Управление процессами по имени: pkill и killall

Хотя ps и kill полагаются на PID, иногда быстрее нацеливаться на процессы по имени. Используйте эти команды с особой осторожностью, так как они могут одновременно влиять на несколько процессов.

killall

Завершает все процессы, соответствующие точному указанному имени процесса.

killall httpd  # Отправляет SIGTERM всем процессам с именем 'httpd'
killall -9 cron  # Принудительно убивает все процессы 'cron'

pkill

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

# Убивает любой процесс, чьё имя команды содержит 'firefox'
pkill -f firefox

Предупреждение относительно killall и pkill: Если вы случайно нацелитесь на критический системный процесс (например, init или systemd), вы можете дестабилизировать или вызвать крах всей вашей операционной системы. Всегда проверяйте целевой PID с помощью ps перед использованием killall или pkill с широкими шаблонами.

Обзор рабочего процесса управления процессами

При устранении неполадок с вышедшим из-под контроля приложением следуйте этому систематическому подходу:

  1. Идентификация: Используйте ps aux | grep <process_name>, чтобы найти PID процесса и проверить его статус.
  2. Проверка состояния: Изучите столбец STAT. Если это Z (Зомби), родительский процесс завершён, и может потребоваться перезагрузка, если родительский процесс не может быть убит.
  3. Попытка корректной остановки: Отправьте SIGTERM (по умолчанию kill PID). Подождите несколько секунд.
  4. Проверка остановки: Снова запустите ps.
  5. Принудительная остановка (при необходимости): Если процесс сохраняется, отправьте SIGKILL (kill -9 PID).

Освоение ps и kill является необходимым для поддержания здоровой, отзывчивой среды Linux. Понимая PID и доступные сигналы, администраторы получают точный контроль над выполнением системы.