Найти в Дзене

Принудительное завершение процесса Linux с помощью команд Top, Kill, Pkill, Killall и Xkill.

Оглавление

Если процесс перестает отвечать на запросы и потребляет слишком много системных ресурсов, пришло время его убить.

В Windows любой процесс можно легко завершить с помощью диспетчера задач. В Linux большинство процессов имеют собственный способ завершения работы. В некоторых можно выйти, используя клавишу q на клавиатуре, а в некоторых с помощью ввода команды exit.

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

В этом случае вы можете принудительно завершить процесс, используя команды top, kill, pkill, killall и xkill.

Как убивается процесс.

Прежде чем научиться убивать какой-либо процесс, вам необходимо понять, как процессы завершаются «за кулисами», чтобы понять наиболее подходящие методы и способы уничтожения любого процесса.

Замечание

Init — это главный процесс, который запускается при загрузке системы и которому присвоен PID 1. Проще говоря, вы не можете завершить процесс инициализации, пока он не примет решение и не позволит себя завершить (например, завершение работы операционной системы).

Важно понимать, когда и какие типы процессов разрешено убивать.

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

В Linux во время завершения процесса передается специальный сигнал. Для управления процессом завершения можно использовать множество сигналов. Чтобы получить полный список доступных сигналов, используйте следующую команду

kill -l
-2

Обычным пользователям не нужно переживать о знании всех этих сигналов. Достаточно запомнить только 3 из них: 1, 9 и 15.

1 - SIGHUP - Hangup
9 - SIGKILL - Kill Signal
15 - SIGTERM - Terminate
  • SIGHUP — менее безопасный способ завершить любой процесс.
  • SIGKILL — это мощный способ завершить любой процесс, вызвав фатальную ошибку. Такой способ сработает в большинстве случаев, когда процесс не отвечает. Но имейте в виду такой сигнал не сохраняет данные, которые используется процессом.
  • SIGTERM — это стандартный и самый безопасный способ аккуратно завершить любой процесс.

Как только вы разберетесь со всеми сигналами, используемых для уничтожения любых процессов. Следующее, что необходимо — узнать PID процесса для его уничтожения с помощью команды kill.

Завершение процесса с помощью top

Одним из самых эффективных и простых способов завершить любой процесс — использовать команду top.

Команда top перечисляет все запущенные процессы в вашей системе с указанием их PID, использования памяти и потребления ЦП.

top

Вывод команды следующий

-3

Чтобы завершить любой процесс в верхнем интерфейсе, нажмите кнопку k на клавиатуре и введите PID процесса,

-4

Как можно видеть, что я отключил nginx с помощью PID 22737, используя интерфейс top.

Просмотр всех запущенных процессов

Прежде чем завершить какой-либо процесс, как могли видеть в предыдущем примере, вам необходимо найти PID этого конкретного процесса.

Команды pidof, pgrep и ps — это один из самых эффективных и простых способов найти PID любого конкретного процесса, помимо всех других команд, таких как top в Linux.

команда pidof

Чтобы узнать все запущенные процессы вместе с их PID, запустите команду pidof вместе с именем процесса.

pidof nginx
-5

Как видите, так можно найти все PID, связанные с сервером nginx (22738, 22737), который можно использовать для его закрытия.

команда pgrep

Команда pgrep — это еще один способ найти PID процессов.

Вы можете использовать pgrep с именем процесса, чтобы вернуть PID, как показано ниже.

pgrep nginx
-6

команда ps

Команда ps аналогична команде top, за исключением того, что отображает информацию "в моменте". Для получения определенной информации к команде могут быть добавлены опции.

ps <options>

Ниже приведены наиболее часто используемые опции.

  • a - отобразить все процессы системы.
  • u - Предоставляет подробную информацию о каждом процессе.
  • x - отображает процессы, обрабатываемые с помощью команды systemctl.
ps aux
-7

Вы можете передать вывод команды ps команде grep с указанием конкретного процесса.

ps aux | grep nginx
-8

Завершение процесса в Linux с помощью команд Kill, Killall, Pkill и Xkill.

В Linux существует несколько разных способов, завершить процесс, в зависимости от вашей ситуации.

Если вы нашли PID процесса любым из упомянутых выше способов, то вы можете завершить процесс с помощью команды kill.

Если вы не знаете PID, вам не о чем беспокоиться. Используйте команду killall или pkill, чтобы завершить любой процесс, передав ей имя.

Не знаете PID или имя процесса? Тогда xkill — лучший вариант завершить любой процесс одним щелчком мыши.

Завершение процесса с помощью команды Kill

Команда kill может завершить процесс, если вы знаете PID. По умолчанию, эта команда отправляет процессу сигнал SIGHUP или SIGTERM для завершения работы.

kill 22738
-9

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

kill -SIGKILL 23203
или
kill -9 23203
-10

В данном случае не важно используете вы имя сигнала или его значение.

Завершение процесса с помощью команды Killall

Если вы не знаете PID процесса, то можете использовать команду killall. Команда killall отправляет процессу сигнал SIGHUP или SIGTERM и может уничтожить все процессы с указанием только имени процесса.

Например, если вы запустили несколько процессов vi на двух разных терминалах. Команда killall уничтожит оба процесса одновременно.

killall vi
-11

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

killall -SIGKILL vi
или
killall -9 vi

Можно использовать имя сигнала, либо его значения. Оба варианта сработают одинаково.

Завершение процесса с помощью pkill

Команда pkill аналогична команде killall. Она так же отправляет процессу сигнал SIGHUP или SIGTERM и уничтожит все процессы с указанным именем.

Например, если вы запускали несколько процессов nginx. Команда pkill одновременно завершит все процессы nginx, как показано ниже.

pkill nginx
-12

И так же, если такой метод не сработал, то можете попробовать передать команде сигнал SIGKILL

pkill -SIGKILL nginx
или
pkill -9 nginx

Завершение процесса с помощью команды xkill

Команда xkill используется для завершения процессов на X-серверах без необходимости указания PID или имени процесса. Эта команда принудительно закрывает приложение с помощью сигнала SIGKILL, поэтому будьте аккуратны, можно очень легко потерять несохраненные данные.

Для того, чтобы начать работать с этой командой, достаточно просто ввести в терминале следующую команду

xkill

-13

Наведите курсор на приложение, которое хотите закрыть, и нажмите левую кнопку.

Выше вы можете видеть, что после выполнения команды xkill курсор-стрелка превратился в крестообразный курсор. После этого я просто навел курсор на нужное окно и щелкнул левой кнопкой мыши, чтобы закрыть его.

Вы также можете назначить для этой команды сочетание клавиш, для удобства пользования.

Что делать, если зависло все и нет возможности попасть в терминал.

В этом случае остается только перезагрузка ОС.

Заключение

Итак, подведем итог, что делать, если хотите завершить процесс

  • Когда процесс зависает и перестает отвечать на запросы, вы можете завершить его вручную с помощью командной строки.
  • Чтобы завершить любой процесс в Linux, сначала узнайте PID или имя процесса с помощью команд top, pidof, pgrep, ps.
  • Найдя PID или имя процесса, используйте команды kill, killall или pkill, чтобы завершить процесс.
  • Вы ничего не нашли? Используйте команду xkill, чтобы завершить любой процесс одним щелчком мыши.
  • Если ничего не получается при запуске команды по умолчанию, измените ее сигнал на SIGKILL, который принудительно завершит процесс.
  • Ничего не помогает, все зависло намертво? Ну тут как говорится: "Семь бед - один ресет"