Руководство по управлению процессами Linux с помощью 'ps' и 'kill'
Узнайте, как просматривать процессы Linux с помощью `ps`, читать ключевые столбцы и безопасно останавливать процессы с помощью `kill`, `pkill` и `killall`.
Руководство по управлению процессами в Linux с помощью 'ps' и 'kill'
Управление процессами Linux — это повседневный навык устранения неполадок. Когда приложение зависает, задача резервного копирования потребляет ресурсы процессора или демону требуется чистый перезапуск, ps помогает найти процесс, а kill позволяет отправить ему правильный сигнал.
Каждая запущенная программа имеет идентификатор процесса, или PID. Зная этот 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 предоставляет полный список в формате POSIX.
-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. Обозначение в скобках позволяет избежать этого лишнего совпадения:ps aux | grep '[h]ttpd'
Управление процессами с помощью команды kill
Команда kill не просто останавливает процессы; она отправляет им сигналы. Поведение по умолчанию — запрос на корректное завершение, но другие сигналы могут указать процессу перечитать файлы конфигурации, временно приостановить выполнение или принудительно завершиться немедленно.
Понимание сигналов
Сигналы — это стандартизированные числовые или мнемонические коды. Вы можете вывести список доступных сигналов с помощью kill -l.
| Имя сигнала | Номер сигнала | Описание |
|---|---|---|
| SIGTERM | 15 | Сигнал завершения по умолчанию. Просит процесс корректно завершить работу. |
| SIGKILL | 9 | Сигнал немедленного принудительного завершения. Процесс не может его игнорировать. |
| SIGHUP | 1 | Сигнал отбоя, часто используется демонами для перечитывания файлов конфигурации. |
| SIGSTOP | Обычно 19 на x86 Linux | Останавливает (приостанавливает) процесс без его завершения. |
| SIGCONT | Обычно 18 на x86 Linux | Возобновляет остановленный процесс. |
Отправка сигналов с помощью kill
Базовый синтаксис команды kill:
kill -SIGNAL PID
1. Корректное завершение (лучшая практика)
Сначала попробуйте SIGTERM. Он дает приложению возможность сохранить состояние, закрыть файлы, завершить запросы и освободить блокировки.
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с широкими шаблонами.
Безопасный рабочий процесс управления процессами
При устранении неполадок с вышедшим из-под контроля приложением следуйте этому систематическому подходу:
- Идентификация: Используйте
ps aux | grep <имя_процесса>, чтобы найти PID процесса и проверить его статус. - Проверка состояния: Изучите столбец
STAT. Если онZ, процесс уже мертв; вам нужно, чтобы родительский процесс подобрал его. ПроверьтеPPIDперед тем, как что-либо убивать. - Попытка корректной остановки: Отправьте
SIGTERM(по умолчаниюkill PID). Подождите несколько секунд. - Проверка остановки: Снова выполните
ps. - Принудительная остановка при необходимости: Если процесс продолжает существовать и вы понимаете риск, отправьте
SIGKILLс помощьюkill -9 PID.
Практическая привычка проста: определите PID, проверьте владельца и состояние, отправьте самый щадящий полезный сигнал, затем проверьте результат. Это делает очистку процессов предсказуемой и снижает вероятность остановки не той рабочей нагрузки.