Если процесс перестает отвечать на запросы и потребляет слишком много системных ресурсов, пришло время его убить.
В Windows любой процесс можно легко завершить с помощью диспетчера задач. В Linux большинство процессов имеют собственный способ завершения работы. В некоторых можно выйти, используя клавишу q на клавиатуре, а в некоторых с помощью ввода команды exit.
К сожалению, некоторые процессы становятся слишком упрямыми, чтобы их можно было завершить такими методами, и не позволяют завершить работу корректно.
В этом случае вы можете принудительно завершить процесс, используя команды top, kill, pkill, killall и xkill.
Как убивается процесс.
Прежде чем научиться убивать какой-либо процесс, вам необходимо понять, как процессы завершаются «за кулисами», чтобы понять наиболее подходящие методы и способы уничтожения любого процесса.
Замечание
Init — это главный процесс, который запускается при загрузке системы и которому присвоен PID 1. Проще говоря, вы не можете завершить процесс инициализации, пока он не примет решение и не позволит себя завершить (например, завершение работы операционной системы).
Важно понимать, когда и какие типы процессов разрешено убивать.
- Пользователь может легко завершить собственный процесс, но не может убить процессы других пользователей
- Обычные пользователи не могут завершить процессы системного уровня.
- Пользователь root — это самый главный пользователь, способный убить все, что перед ним (но не переусердствуйте, это может привести к сбою вашей системы).
В Linux во время завершения процесса передается специальный сигнал. Для управления процессом завершения можно использовать множество сигналов. Чтобы получить полный список доступных сигналов, используйте следующую команду
kill -l
Обычным пользователям не нужно переживать о знании всех этих сигналов. Достаточно запомнить только 3 из них: 1, 9 и 15.
1 - SIGHUP - Hangup
9 - SIGKILL - Kill Signal
15 - SIGTERM - Terminate
- SIGHUP — менее безопасный способ завершить любой процесс.
- SIGKILL — это мощный способ завершить любой процесс, вызвав фатальную ошибку. Такой способ сработает в большинстве случаев, когда процесс не отвечает. Но имейте в виду такой сигнал не сохраняет данные, которые используется процессом.
- SIGTERM — это стандартный и самый безопасный способ аккуратно завершить любой процесс.
Как только вы разберетесь со всеми сигналами, используемых для уничтожения любых процессов. Следующее, что необходимо — узнать PID процесса для его уничтожения с помощью команды kill.
Завершение процесса с помощью top
Одним из самых эффективных и простых способов завершить любой процесс — использовать команду top.
Команда top перечисляет все запущенные процессы в вашей системе с указанием их PID, использования памяти и потребления ЦП.
top
Вывод команды следующий
Чтобы завершить любой процесс в верхнем интерфейсе, нажмите кнопку k на клавиатуре и введите PID процесса,
Как можно видеть, что я отключил nginx с помощью PID 22737, используя интерфейс top.
Просмотр всех запущенных процессов
Прежде чем завершить какой-либо процесс, как могли видеть в предыдущем примере, вам необходимо найти PID этого конкретного процесса.
Команды pidof, pgrep и ps — это один из самых эффективных и простых способов найти PID любого конкретного процесса, помимо всех других команд, таких как top в Linux.
команда pidof
Чтобы узнать все запущенные процессы вместе с их PID, запустите команду pidof вместе с именем процесса.
pidof nginx
Как видите, так можно найти все PID, связанные с сервером nginx (22738, 22737), который можно использовать для его закрытия.
команда pgrep
Команда pgrep — это еще один способ найти PID процессов.
Вы можете использовать pgrep с именем процесса, чтобы вернуть PID, как показано ниже.
pgrep nginx
команда ps
Команда ps аналогична команде top, за исключением того, что отображает информацию "в моменте". Для получения определенной информации к команде могут быть добавлены опции.
ps <options>
Ниже приведены наиболее часто используемые опции.
- a - отобразить все процессы системы.
- u - Предоставляет подробную информацию о каждом процессе.
- x - отображает процессы, обрабатываемые с помощью команды systemctl.
ps aux
Вы можете передать вывод команды ps команде grep с указанием конкретного процесса.
ps aux | grep nginx
Завершение процесса в Linux с помощью команд Kill, Killall, Pkill и Xkill.
В Linux существует несколько разных способов, завершить процесс, в зависимости от вашей ситуации.
Если вы нашли PID процесса любым из упомянутых выше способов, то вы можете завершить процесс с помощью команды kill.
Если вы не знаете PID, вам не о чем беспокоиться. Используйте команду killall или pkill, чтобы завершить любой процесс, передав ей имя.
Не знаете PID или имя процесса? Тогда xkill — лучший вариант завершить любой процесс одним щелчком мыши.
Завершение процесса с помощью команды Kill
Команда kill может завершить процесс, если вы знаете PID. По умолчанию, эта команда отправляет процессу сигнал SIGHUP или SIGTERM для завершения работы.
kill 22738
Если описанный выше метод не сработал, вы можете принудительно завершить процесс, используя другой сигнал, например SIGKILL или его значение сигнала 9, как показано ниже.
kill -SIGKILL 23203
или
kill -9 23203
В данном случае не важно используете вы имя сигнала или его значение.
Завершение процесса с помощью команды Killall
Если вы не знаете PID процесса, то можете использовать команду killall. Команда killall отправляет процессу сигнал SIGHUP или SIGTERM и может уничтожить все процессы с указанием только имени процесса.
Например, если вы запустили несколько процессов vi на двух разных терминалах. Команда killall уничтожит оба процесса одновременно.
killall vi
Если описанный выше метод не сработал, вы можете принудительно завершить процесс, используя другой сигнал, например SIGKILL или его значение сигнала 9, как показано ниже.
killall -SIGKILL vi
или
killall -9 vi
Можно использовать имя сигнала, либо его значения. Оба варианта сработают одинаково.
Завершение процесса с помощью pkill
Команда pkill аналогична команде killall. Она так же отправляет процессу сигнал SIGHUP или SIGTERM и уничтожит все процессы с указанным именем.
Например, если вы запускали несколько процессов nginx. Команда pkill одновременно завершит все процессы nginx, как показано ниже.
pkill nginx
И так же, если такой метод не сработал, то можете попробовать передать команде сигнал SIGKILL
pkill -SIGKILL nginx
или
pkill -9 nginx
Завершение процесса с помощью команды xkill
Команда xkill используется для завершения процессов на X-серверах без необходимости указания PID или имени процесса. Эта команда принудительно закрывает приложение с помощью сигнала SIGKILL, поэтому будьте аккуратны, можно очень легко потерять несохраненные данные.
Для того, чтобы начать работать с этой командой, достаточно просто ввести в терминале следующую команду
xkill
Наведите курсор на приложение, которое хотите закрыть, и нажмите левую кнопку.
Выше вы можете видеть, что после выполнения команды xkill курсор-стрелка превратился в крестообразный курсор. После этого я просто навел курсор на нужное окно и щелкнул левой кнопкой мыши, чтобы закрыть его.
Вы также можете назначить для этой команды сочетание клавиш, для удобства пользования.
Что делать, если зависло все и нет возможности попасть в терминал.
В этом случае остается только перезагрузка ОС.
Заключение
Итак, подведем итог, что делать, если хотите завершить процесс
- Когда процесс зависает и перестает отвечать на запросы, вы можете завершить его вручную с помощью командной строки.
- Чтобы завершить любой процесс в Linux, сначала узнайте PID или имя процесса с помощью команд top, pidof, pgrep, ps.
- Найдя PID или имя процесса, используйте команды kill, killall или pkill, чтобы завершить процесс.
- Вы ничего не нашли? Используйте команду xkill, чтобы завершить любой процесс одним щелчком мыши.
- Если ничего не получается при запуске команды по умолчанию, измените ее сигнал на SIGKILL, который принудительно завершит процесс.
- Ничего не помогает, все зависло намертво? Ну тут как говорится: "Семь бед - один ресет"