kill
В мире Linux и других Unix-подобных систем управление процессами — фундаментальный навык. Когда программа зависала или начала потреблять слишком много ресурсов, на помощь приходит команда kill
. Вопреки своему названию, ее основная задача — не просто «убивать» процессы, а отправлять им сигналы. В этой статье мы подробно разберем, как использовать kill
, все ее ключевые сигналы и приведем практические примеры.
Что такое команда kill?
kill
— это встроенная утилита в командной строке Linux, предназначенная для взаимодействия с запущенными процессами путем отправки им определенных сигналов. По умолчанию, если не указан тип сигнала, отправляется сигнал SIGTERM
(15), который корректно запрашивает завершение процесса.
kill [опции] <PID>
где PID
(Process ID) — уникальный идентификатор процесса.
Как найти PID процесса
Прежде чем что-то «убивать», нужно найти жертву. Для этого есть несколько инструментов.
1. ps (process status)
Команда ps
показывает список активных процессов.
ps aux | grep firefox
Эта команда найдет все процессы, связанные с Firefox, и покажет их PID.
2. pgrep (process grep)
Более простой способ найти PID по имени процесса.
pgrep firefox
Команда просто выведет число — PID процесса Firefox.
3. top / htop
Интерактивные мониторы системы. В них можно посмотреть список процессов и их PID в реальном времени. htop
является более современной и удобной альтернативой.
Основные сигналы команды kill
Сигналы — это основа работы kill
. Вот самые важные из них:
Сигнал | Номер | Описание |
---|---|---|
SIGHUP | 1 | «Зависание». Часто используется для перезагрузки конфигурации процесса. |
SIGINT | 2 | «Прерывание» (аналог Ctrl+C в терминале). |
SIGQUIT | 3 | «Выход» (аналог Ctrl+). |
SIGKILL | 9 | Немедленное уничтожение процесса. Ядро останавливает процесс без возможности его обработать сигнал. |
SIGTERM | 15 | Корректное завершение (по умолчанию). Процессу отправляется запрос на завершение, который он может обработать (закрыть файлы, сохранить данные). |
SIGSTOP | 19 | Приостановка выполнения процесса (аналог Ctrl+Z). |
SIGCONT | 18 | Продолжение выполнения приостановленного процесса. |
Важно: Сигналы
SIGKILL
(9) иSIGSTOP
(19) невозможно перехватить или проигнорировать. Процесс будет завершен или остановлен ядром системы принудительно.
Практические примеры использования kill
Пример 1: Корректное завершение процесса (SIGTERM)
Допустим, мы нашли PID текстового редактора Gedit: 1256
.
# Отправляем сигнал SIGTERM (по умолчанию, поэтому можно не указывать)
kill 1256
# Или то же самое, но с явным указанием сигнала
kill -15 1256
Процесс получит запрос на завершение и закроет все файлы перед выходом.
Пример 2: Принудительное завершение (SIGKILL)
Если процесс не реагирует на SIGTERM
(например, завис), используйте SIGKILL
.
# Принудительно "убиваем" процесс с PID 1256
kill -9 1256
# Или эквивалентная запись
kill -SIGKILL 1256
Это последнее средство, так как процесс не успеет сохранить данные или корректно завершить работу.
Пример 3: Перезагрузка конфигурации (SIGHUP)
Многие демоны (фоновые процессы, например, nginx) перечитывают свои конфигурационные файлы при получении сигнала SIGHUP
.
# Находим PID nginx
pgrep nginx
# Предположим, он вернул 881
kill -1 881
# Или более читаемо
kill -SIGHUP 881
После этого Nginx продолжит работу с обновленными настройками.
Пример 4: Приостановка и возобновление процесса
Это полезно для освобождения ресурсов без полного завершения работы.
# Приостанавливаем процесс с PID 2250
kill -SIGSTOP 2250
# Возобновляем его работу
kill -SIGCONT 2250
Полезные альтернативы: killall и pkill
Иногда удобнее работать не с PID, а с именем процесса.
Команда killall
Завершает все процессы с указанным именем.
# Корректно завершаем все процессы firefox
killall firefox
# Принудительно завершаем все процессы с именем "my_script.sh"
killall -9 my_script.sh
Команда pkill
Еще более мощный инструмент. Позволяет завершать процессы по шаблону имени.
# Завершаем все процессы, имена которых начинаются на "chrome"
pkill chrome
# Можно использовать более сложные шаблоны
pkill -f "python my_long_script.py" # -f ищет по всей командной строке
Частые ошибки и рекомендации
- Всегда сначала используйте
SIGTERM
(kill <PID>
). Дайте процессу шанс завершиться правильно. Прибегайте кSIGKILL
только в крайних случаях. - Не злоупотребляйте
sudo kill
. Завершение системных процессов от root может привести к нестабильной работе системы. - Проверяйте PID. Завершение не того процесса может иметь неприятные последствия. Всегда double-check.
- Сигнал
SIGKILL
не дает 100% гарантии. В редких случаях процесс может оказаться в состоянииD
(uninterruptible sleep), обычно из-за проблем с железом или драйверами, и дажеkill -9
будет бессилен. В таком случае часто помогает только перезагрузка.
Заключение
Команда kill
— это не просто «убийца» процессов, а точный инструмент для управления ими. Понимание различий между сигналами, особенно между SIGTERM
и SIGKILL
, — ключ к грамотной администрации Linux-систем. Используйте SIGTERM
для вежливого запроса на закрытие и оставляйте SIGKILL
для тех редких случаев, когда процессы перестают на что-либо реагировать.
Освойте связку команд ps
/pgrep
-> kill
, и вы получите полный контроль над всеми работающими программами в вашей системе.