
На Linux иногда приложения перестают отвечать, блокируют системные ресурсы или зависают из-за ошибок. В таких случаях стандартное закрытие через графический интерфейс не работает, и требуется принудительное завершение процесса.
Каждый процесс в Linux имеет уникальный идентификатор PID, который позволяет управлять его выполнением. Команды kill и killall используют этот идентификатор для остановки конкретного процесса или группы процессов с одинаковым именем.
Для графических приложений можно применить инструмент xkill, который позволяет указать зависшее окно и мгновенно завершить его выполнение. Для текстовых и системных процессов удобнее использовать pkill и pgrep, позволяющие находить процессы по имени и другим параметрам.
Некоторые процессы защищены или находятся в состоянии, когда стандартные сигналы не действуют. В таких случаях используются сигналы SIGKILL и SIGSTOP, которые принудительно прекращают выполнение процесса, обходя блокировки ядра.
Использование команды kill для завершения процесса по PID

Команда kill позволяет завершить конкретный процесс на основе его уникального идентификатора PID. Для получения PID используется команда ps или pidof. Пример:
- Найти PID процесса:
ps aux | grep имя_процессаилиpidof имя_процесса. - Отправить стандартный сигнал завершения:
kill PID. Этот сигнал SIGTERM информирует процесс о необходимости закрыться корректно. - Если процесс не завершился, применить принудительное завершение:
kill -9 PID. Сигнал SIGKILL немедленно останавливает выполнение процесса.
Для одновременной отправки сигнала нескольким процессам можно перечислить PID через пробел:
kill -9 1234 5678 9012
Команда kill поддерживает использование других сигналов:
- SIGHUP – перезапуск процесса без полного завершения системы.
- SIGINT – эквивалент нажатия Ctrl+C в терминале.
- SIGSTOP – временная приостановка процесса без завершения.
Правильное использование PID предотвращает случайное завершение критических процессов и позволяет контролировать нагрузку на систему при зависших приложениях.
Завершение зависших приложений через pkill и pgrep

Пример использования pgrep для поиска зависшего приложения:
pgrep firefox
Для завершения всех процессов с одним именем используется pkill:
pkill -9 firefox
Сигнал SIGKILL немедленно остановит выполнение всех процессов Firefox.
Ниже приведена таблица с примерами команд и их действием:
| Команда | Описание |
|---|---|
| pgrep имя_процесса | |
| pkill имя_процесса | Отправляет стандартный сигнал SIGTERM процессам с указанным именем |
| pkill -9 имя_процесса | Принудительно завершает процессы с именем с помощью SIGKILL |
| pkill -u пользователь имя_процесса | Завершает процессы указанного пользователя |
Использование pkill и pgrep ускоряет управление зависшими приложениями и снижает риск случайного завершения системных процессов.
Принудительное закрытие графических программ с xkill

Команда xkill используется для завершения зависших графических окон в X-средах Linux. После запуска xkill курсор превращается в крестик, и клик по окну завершает связанный с ним процесс.
Запуск команды выполняется через терминал:
xkill
Чтобы завершить конкретное окно, наведите курсор на его область и кликните. Процесс будет остановлен мгновенно без сохранения данных, поэтому использовать xkill рекомендуется только для зависших приложений.
Для быстрого закрытия нескольких окон можно вызвать xkill несколько раз или удерживать клавишу Ctrl при клике. Программа поддерживает сигналы, например:
xkill -frame– выбор окна по рамке.xkill -id WINDOWID– завершение процесса по идентификатору окна.
Команда xkill удобна для управления графическими приложениями без необходимости искать их PID, особенно при зависании браузеров, текстовых редакторов и медиа-плееров.
Управление процессами через системный монитор

Системный монитор позволяет отслеживать состояние процессов в реальном времени и завершать зависшие приложения через графический интерфейс. Популярные инструменты включают GNOME System Monitor, KSysGuard и htop.
В GNOME System Monitor можно отсортировать процессы по нагрузке CPU или памяти, выбрать зависший процесс и нажать кнопку Завершить для отправки сигнала SIGTERM. Если процесс не закрывается, доступна кнопка Принудительно завершить, отправляющая SIGKILL.
В KSysGuard предусмотрена возможность фильтрации по имени пользователя, что удобно для завершения процессов конкретного пользователя без риска остановки системных служб.
htop используется через терминал и позволяет выбирать процессы с помощью клавиш навигации. Для завершения процесса используется клавиша F9, после чего можно выбрать сигнал для отправки.
Использование системного монитора особенно полезно для контроля ресурсов и безопасного управления зависшими приложениями без необходимости помнить PID и команды терминала.
Применение killall для массового завершения процессов

Команда killall позволяет завершать все процессы с указанным именем одновременно, без необходимости вручную искать их PID. Она полезна, когда зависают несколько экземпляров одного приложения.
Пример базового использования:
killall firefox
Эта команда отправит сигнал SIGTERM всем процессам Firefox. Для принудительного завершения используется:
killall -9 firefox
Сигнал SIGKILL мгновенно завершает все выбранные процессы.
Дополнительно killall поддерживает фильтры:
killall -u пользователь имя_процесса– завершение процессов конкретного пользователя.killall -i имя_процесса– подтверждение перед завершением каждого процесса.killall -r 'регулярное_выражение'– завершение процессов, имя которых соответствует шаблону.
Использование killall упрощает управление множественными зависшими приложениями и снижает риск пропуска процессов, которые нужно завершить одновременно.
Обход блокировок при невозможности завершить процесс стандартными методами

Иногда процессы находятся в состоянии, когда стандартные сигналы SIGTERM и SIGINT не действуют. Это происходит при блокировке ядра, зависании драйверов или использовании защищённых ресурсов.
Для принудительного завершения таких процессов применяют сигнал SIGKILL через команды kill -9 PID, pkill -9 имя_процесса или killall -9 имя_процесса. SIGKILL немедленно прекращает выполнение процесса, минуя обработку сигналов приложением.
Если даже SIGKILL не завершает процесс, стоит проверить следующие моменты:
- Зависимость от ресурсов системы, например блокировка NFS или диска. Проверка через lsof или fuser помогает выявить такие блокировки.
- Использование команд strace или lsof для анализа системных вызовов процесса перед принудительным завершением.
Обход блокировок требует аккуратности: некорректное завершение системных процессов может привести к потере данных или нестабильной работе системы.
Вопрос-ответ:
Как найти PID зависшей программы в Linux?
Для определения PID процесса можно использовать команду ps aux | grep имя_процесса или pidof имя_процесса. Эти команды выведут список идентификаторов всех запущенных экземпляров приложения, после чего можно применять команды завершения.
В чем разница между kill и killall?
Команда kill завершает процесс по конкретному PID, что позволяет контролировать отдельный процесс. killall отправляет сигнал всем процессам с указанным именем, что удобно для остановки нескольких экземпляров приложения одновременно. killall поддерживает фильтры по пользователю и регулярные выражения.
Когда стоит использовать xkill для закрытия приложений?
xkill применяется для завершения зависших графических окон в X-средах. После запуска курсор превращается в крестик, и клик по окну завершает связанный процесс. Это быстрое решение для браузеров, текстовых редакторов и других графических программ, которые перестали реагировать на стандартные команды закрытия.
Что делать, если процесс не реагирует на SIGTERM?
Если процесс не закрывается обычным сигналом SIGTERM, используется SIGKILL через kill -9 PID, pkill -9 имя_процесса или killall -9 имя_процесса. SIGKILL прекращает выполнение процесса принудительно. Если процесс находится в состоянии D (ожидание ввода-вывода), завершение возможно только после освобождения ресурсов или перезагрузки системы.
Как завершить процессы конкретного пользователя?
Для этого можно использовать pkill -u имя_пользователя имя_процесса или killall -u имя_пользователя имя_процесса. Эти команды ограничивают действие только процессами указанного пользователя, предотвращая случайное завершение системных служб.
Как безопасно завершить зависший процесс в Linux без риска остановки системных служб?
Для безопасного завершения зависшего процесса сначала определите его PID с помощью команд ps aux | grep имя_процесса или pgrep имя_процесса. Затем используйте kill PID для отправки сигнала SIGTERM, который позволяет процессу корректно завершиться. Если процесс не реагирует, примените kill -9 PID для принудительного завершения. Чтобы не затронуть системные службы, проверяйте пользователя, которому принадлежит процесс, и при необходимости используйте фильтры через pkill -u имя_пользователя или killall -u имя_пользователя имя_процесса.
