Если процесс перестаёт отвечать на запросы и потребляет слишком много системных ресурсов, значит, пришло время его завершить.
В Windows любой процесс можно легко завершить с помощью диспетчера задач. В Linux у большинства процессов есть собственный способ завершения. Некоторые можно завершить с помощью клавиши q на клавиатуре, а для некоторых используется команда exit.
К сожалению, некоторые процессы становятся слишком «упрямыми», чтобы их можно было завершить с помощью любого из рекомендуемых методов, и не позволяют завершить себя корректно.
В это время вы можете принудительно завершить процесс с помощью команд top, kill, pkill, killall и xkill в Linux.
Как завершить процесс?
Прежде чем вы научитесь завершать любой процесс, вам нужно понять, как процессы завершаются «за кулисами», чтобы выбрать наиболее подходящие методы и способы завершения любого процесса.
Ознакомьтесь с информацией ниже, чтобы понять, какие типы процессов можно завершить.
- Пользователь может легко завершить свой собственный процесс.
- Но он не может завершить процессы других пользователей.
- Процессы системного уровня, такие как диспетчер отображения, не могут быть завершены обычными пользователями.
- Пользователь root — король, он может завершить любой процесс (не переусердствуйте, это может привести к сбою системы).
Пользователь с правами root может завершить любой процесс, если он является пользователем root или если он добавляет sudo перед командой или входит в корневую оболочку с помощью команды su.
В Linux при завершении процесса отправляется сигнал. Для управления процессом завершения можно использовать множество сигналов. Чтобы получить полный список, воспользуйтесь приведённой ниже командой.
kill -l
Обычным пользователям не нужно беспокоиться обо всех этих сигналах. Вам нужно знать только о сигналах 1, 9 и 15.
| Название сигнала | Значение сигнала | Поведение |
|---|---|---|
| SIGHUP | 1 | Отбой |
| SIGKILL | 9 | Сигнал уничтожения |
| SIGTERM | 15 | Прекратить |
- SIGHUP — менее безопасный способ завершить любой процесс. Расположите его между SIGKILL и SIGTERM.
- SIGKILL — это принудительный способ завершить любой процесс, вызвав фатальную ошибку. В большинстве случаев это сработает, если процесс не отвечает, но при этом процесс не будет сохранён.
- SIGTERM — это стандартный и самый безопасный способ корректно завершить любой процесс.
Как только вы разберётесь со всеми сигналами, используемыми для завершения любого процесса. Следующее, что нужно сделать, — это узнать PID любого процесса при завершении с помощью команды kill .
Завершение процесса с помощью команды Top
В Linux самый эффективный и простой способ завершить любой процесс — использовать команду top.
Команда top выводит список всех запущенных процессов в вашей системе с указанием их PID, объёма используемой памяти и загрузки ЦП.
top
Чтобы завершить любой процесс в интерфейсе top, нажмите кнопку k на клавиатуре и введите PID процесса.
Перечислите все запущенные процессы Linux.
Прежде чем вы завершите какой-либо процесс, вам нужно найти PID этого конкретного процесса, используя упомянутый метод.
Команды pidof, pgrep, и ps — самый эффективный и простой способ узнать PID любого конкретного процесса, помимо всех остальных команд, таких как top в Linux.
Команда pidof
Чтобы узнать все запущенные процессы вместе с их PID без каких-либо изменений в выходных данных, подобных top команде, выполните команду pidof вместе с именем процесса.
pidof nano
Выше вы можете найти PID редактора nano, который равен 7153. Его можно использовать для завершения работы редактора.
Команда pgrep
Команда pgrep — это сложный способ поиска любого PID. Для выполнения базовой работы необходимо знать регулярные выражения.
Чтобы вернуть PID, можно использовать pgrep с именем процесса без каких-либо флагов, как показано ниже.
pgrep nano
Команда ps
Команда ps аналогична команде top, за исключением того, что она не требует взаимодействия или колебаний. Можно добавить флаги для извлечения определённой информации вместе с командой ps.
ps <параметры>
Ниже приведены наиболее часто используемые флаги, а также команда ps .
a— Перечислите все процессы во всей системе, а не у конкретных пользователей.u— Предоставьте подробную информацию о каждом процессе.x— Перечислите процессы-демоны, управляемые с помощью командыsystemctl.
ps aux
Вы можете передать команду grep вместе с ps для вывода информации о конкретных процессах с идентификатором PID.
ps aux | grep nano
Ниже описано поведение этой команды.
Завершение процесса в Linux с помощью команд Kill, Killall, Pkill и Xkill
В Linux есть четыре разных способа завершить любой процесс, а также команда top в зависимости от ситуации.
Если вы нашли PID процесса с помощью любого из упомянутых выше методов, то можете завершить процесс с помощью команды kill .
Если вы не знаете PID, не волнуйтесь. Используйте команду killall или pkill для завершения любого процесса по его имени.
Не знаете PID или имя процесса? Тогда xkill — лучший вариант для вас, чтобы завершить любой процесс одним щелчком мыши.
Завершить процесс с помощью команды Kill
Команда kill может завершить процесс, если вы знаете его PID. По умолчанию она отправляет процессу сигнал SIGHUP или SIGTERM для завершения работы.
Замените PID на номер вашего процесса:
kill 7394
Если описанный выше способ не помог, вы можете принудительно завершить процесс, используя другой сигнал, например SIGKILL или его значение 9, как показано ниже.
Не забудьте заменить PID:
kill -SIGKILL 7406
или
kill -9 7406
Можно использовать как имя сигнала, так и его значение; оба варианта работают одинаково.
Завершить процесс с помощью команды Killall
Если вы не знаете PID процесса, можно использовать команду killall. Команда killall отправляет процессу сигнал SIGHUP или SIGTERM и может завершить все процессы с одинаковым именем.
Например, если вы запустили несколько процессов nano в двух разных терминалах. Тогда команда killall завершит оба процесса nano одновременно, как показано ниже.
killall nano
Если описанный выше способ не помог, вы можете принудительно завершить процесс, используя другой сигнал, например SIGKILL или его значение 9, как показано ниже.
Не забудьте заменить название процесса
killall -SIGKILL nano
или
killall -9 nano
Можно использовать имя сигнала или его значение; оба варианта работают одинаково.
Завершить процесс с помощью команды Pkill
Команда pkill аналогична команде pgrep; она отправляет процессу сигнал SIGHUP или SIGTERM и завершает все процессы с таким же именем.
Например, если вы запустили несколько процессов gedit. То команда pkill завершит все процессы gedit одновременно, как показано ниже.
pkill gedit
Если описанный выше способ не помог, вы можете принудительно завершить процесс, используя другой сигнал, например SIGKILL или его значение 9, как показано ниже.
Не забудьте заменить имя процесса:
pkill -SIGKILL gedit
или
pkill -9 gedit
Можно использовать либо имя сигнала, либо его значение. Оба варианта работают одинаково.
Как завершить процесс, из-за которого всё зависает и я не могу открыть терминал?
В таком случае предпочтительным способом решения проблемы будет перезагрузка.
Завершение процесса с помощью команды Xkill
Команда xkill используется для завершения процессов на X-серверах без указания PID или имени процесса. Она принудительно закрывает приложение с помощью сигнала SIGKILL, поэтому все несохранённые приложения закрываются без сохранения.
Введите приведённую ниже команду в терминале, чтобы начать завершение приложений.
xkill
После выполнения команды обычный курсор превратится в стрелку с крестиком ❌.
Наведите курсор на приложение, которое хотите закрыть, и нажмите кнопку left-click.
Выше вы можете видеть, что после выполнения команды xkill курсор в виде стрелки превратился в курсор в виде креста. После этого мы просто навели курсор на браузер Firefox и нажали left-clicked для закрытия.
Вы также можете создать сочетание клавиш для этой команды, чтобы выполнять её с помощью определённых комбинаций клавиш.
Выводы
- Если процесс завис и не отвечает, его можно завершить вручную с помощью командной строки.
- Чтобы завершить любой процесс в Linux, сначала узнайте его PID или имя с помощью команд
top,pidof,pgrep,ps. - После того как вы нашли PID или имя процесса, используйте команды
kill,killall,илиpkillдля завершения процесса. - Вы ничего не нашли? Тогда используйте команду
xkillдля завершения любого процесса одним щелчком мыши. - Если это не работает с сигналами по умолчанию SIGHUP или SIGTERM, измените их на сигнал SIGKILL, который принудительно завершает процесс.
- Если это по-прежнему не работает, обязательно проверьте владельца исходного процесса или подтвердите, что вы являетесь пользователем root.