Как убить зависший процесс в Linux: команды kill, pkill, killall для Ubuntu
Когда вы работаете в Linux, некоторые процессы могут зависнуть. Это замедляет работу, занимает нужную память и приводит к другим проблемам. В статье расскажем, как с помощью команд закрыть зависшие процессы и не затронуть ничего важного.

Для тех, кто предпочитает работать в знакомом окружении, в облачной платформе Cloud.ru доступны предустановленные образы популярных дистрибутивов Linux, таких как Ubuntu и Debian. Это позволяет быстро развернуть виртуальную машину и сразу приступить к работе, не тратя время на базовую настройку операционной системы.


Идентификация процесса и поиск PID
Перед завершением процесса надо понять, какой у него идентификатор, или PID. Тут вам пригодятся команды ps, top и htop.
Комнада ps покажет все запущенные процессы и даст по ним детальную информацию. А если отфильтруете через grep, то найдете конкретный процесс:
Команда top — утилита, которая отображает процессы в реальном времени, отсортировывает их по потреблению ресурсов и обновляет информацию каждые несколько секунд. Процессы, которые больше всего нагружают процессор, по умолчанию находятся сверху.
Первые пять строк — общая информация о системе: время работы, количество пользователей, загрузка системы (load average), общее количество процессов и их состояние (running, sleeping, stopped, zombie). Источник: learn.microsoft.com.Что чем является в выводе:
PID — идентификатор процесса, который понадобится, чтобы завершить процесс;
USER — владелец процесса;
%CPU — процент использования процессора;
%MEM — использование памяти;
COMMAND — имя процесса или команды.
Команда htop — улучшенная версия top с цветным интерфейсом и удобной навигацией. Позволяет быстрее находить проблемные процессы.
Как дополнение к этим командам для поиска PID можете использовать:
После определения PID можете переходить к завершению процесса с помощью kill или killall. С pkill можно не искать PID, а просто указать имя процесса — система найдет все подходящие процессы и завершит их. О каждой из команд поговорим дальше.
Использование команды kill
Команду kill используют, чтобы отправлять процессам в Linux сигналы. Помните, что по умолчанию kill не убивает процессы, а отправляет им команду на корректное завершение.
Основные сигналы с их наименованиями и номерами в скобках:
SIGTERM (15) — корректное завершение, по умолчанию.
SIGKILL (9) — принудительное завершение.
SIGHUP (1) — перезагрузка конфигурации.
SIGSTOP (19) — приостановка процесса.
Сначала попытайтесь завершить процесс корректно. Для этого введите саму команду kill и PID, который нашли ранее:
Если процесс все же не отвечает, завершите его принудительно:
Чтобы посмотреть все доступные сигналы, введите kill -l.
Использование команды pkill
Команда pkill упрощает завершение процессов — вам не нужно искать PID, чтобы отправить сигнал. Вы просто указываете имя процесса, а pkill сам найдет и завершит все подходящие процессы.
У pkill есть сигналы — так же, как и у «простого» kill. Посмотреть все сигналы вы можете командой kill -l.
Еще вы можете использовать шаблоны — выражения, которые помогают искать процессы по именам. Шаблоны будут полезны, даже если вы не помните имя процесса полностью — можно искать по совпадениям или по части названия:
Перед тем, как завершать процессы по шаблонам, стоит проверить, какие из них будут затронуты. Для этого выполните pgrep -l "шаблон". Рассмотрим на примере шаблона chrome:
У pkill есть полезные флаги, которые меняют поведение команды. Примеры таких флагов: -i, -v и -u:
Использование команды killall
Команда killall завершает все процессы с указанным именем — это ее основное отличие от kill, который работает с конкретными PID. Команда killall особенно полезна, когда приложение создает несколько процессов и нужно быстро освободить ресурсы системы.
Когда использовать killall:
Нужно завершить все процессы с одинаковым именем.
Работаете с приложениями, которые запускают несколько процессов.
Хотите быстро очистить систему от всех копий программы.
Если сравнивать killall с pkill, то killall ищет и завершает процессы, если указать их точное имя. А pkill может использовать шаблоны и завершать все процессы, в которых есть какое-то слово, которые вы введете в шаблоне:
Примеры использования полезных флагов:
Проверка завершения процесса
После завершения процесса важно убедиться, что он действительно перестал работать. Рассказываем, как это проверить.
Через команду ps:
Если процесс завершен, вывод будет пустым. А если процесс еще работает, вы увидите его статус.
Иногда процесс может остаться в состоянии «зомби» (zombie). Тогда он будет отображаться в ps, но по факту не будет работать. В таком случае обычно нужно завершить родительский процесс.
Через команду pgrep:
Если процессы найдены, в выводе будут показаны их PID. В случае, если вывод пустой, все завершено.
Через команду /proc:
В выводе смотрите, показана ли директория. Если ее нет, значит, процесс завершен.
Подробности о завершении процессов
Вместе со специальными командами вы можете использовать сигналы — так вы настроите способ, с помощью которого система завершить нужный процесс. А еще важно проверить права, потому что некоторые процессы может закрыть только root-пользователь.
Отправка сигналов
Сигналы — это способы, с помощью которых вы можете взаимодействовать с процессами в Linux. Вот основные сигналы с их наименованиями и номерами:
Чтобы посмотреть все доступные сигналы, выполните: kill -l.
Права доступа
Чтобы завершать разные по значимости для работы системы процессы, нужны разные права. Например, обычный пользователь может завершить только свои процессы. Пользователь root может убить любые процессы в системе. А что-то защищено даже от root, к примеру, процессы в состоянии D (uninterruptible sleep).
Если пытаетесь завершить процесс и видите сообщение: «Operation not permitted» — значит, для этого действия вам нужны root-права.
Заключение
Подведем итоги и дадим несколько советов, которые помогут безопасно работать с зависшими процессами:
Перед тем, как что-то закрывать, сохраняйте важные данные — допустим, если закрываете процесс в текстовом редакторе или другом приложении.
При использовании команд pkill и killall следите за тем, чтобы правильно указать имя процесса. Если ошибиться даже в одной букве, есть риск, что снесется что-нибудь системное.
Если не знаете, за что отвечает конкретное системное приложение, его лучше не трогать.
Вначале старайтесь завершить процесс корректно: через kill -15 PID или kill -TERM PID.
Принудительное завершение используйте только тогда, когда процесс не реагирует на корректное.
