Битлента
Windows, macOS, Android, iOS5 мин чтения·

Как найти и завершить зависший процесс в Linux и macOS: top, ps, kill и pkill

Как найти программу, которая грузит процессор или зависла, и корректно завершить её в Linux и macOS: top, ps, pgrep, kill, kill -9, pkill и Activity Monitor.

Кратко

Процесс находят через top, ps или pgrep, затем завершают командой kill с номером PID. Сначала лучше обычный сигнал SIGTERM, и только если процесс не реагирует, применяют kill -9. Чужие и системные процессы трогать не стоит.

Найти виновника: top, ps и pgrep

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

top показывает живой список процессов с нагрузкой на процессор и память. В Linux внутри top клавиша P сортирует по процессору, M по памяти, q завершает работу. В macOS top устроен иначе: для сортировки по загрузке процессора используют запуск top -o cpu. Если вам удобнее окно, на Mac есть программа «Мониторинг системы» (Activity Monitor), где процесс завершают кнопкой в панели.

ps делает моментальный снимок. Вариант ps aux выводит все процессы с пользователем, загрузкой процессора и памяти, номером PID и командой; он работает и в Linux, и в macOS. Результат часто направляют в grep, чтобы найти нужное имя, но надёжнее pgrep -l слово: он выводит PID и имя без лишней строки от самого grep.

Запишите PID — числовой идентификатор процесса. Он понадобится для следующих команд. Номер уникален только пока процесс жив, и после его завершения может достаться другой программе, поэтому проверяйте PID непосредственно перед использованием.

kill не всегда убивает: что за сигналы

Название команды kill сбивает с толку: на самом деле она отправляет процессу сигнал, а что с ним произойдёт, решает сам процесс или система. Самые полезные сигналы:

СигналНомерСмысл
SIGTERM15вежливая просьба завершиться; значение по умолчанию
SIGINT2прерывание, то же, что Ctrl+C в терминале
SIGHUP1часто означает «перечитай настройки» или обрыв терминала
SIGKILL9немедленное завершение, программа не может его перехватить
SIGSTOP19 в Linuxприостановка

Команда kill 1234 отправляет SIGTERM процессу с PID 1234. Программа получает шанс сохранить данные, закрыть файлы и корректно выйти. Команда kill -9 1234 отправляет SIGKILL: система обрывает процесс принудительно, без очистки. Номера сигналов на разных системах могут немного различаться, поэтому имя надёжнее числа: kill -TERM и kill -KILL понятны везде.

Порядок действий: от мягкого к жёсткому

Хорошая практика — не начинать сразу с kill -9, а переходить от мягкого способа к жёсткому.

  1. Закройте программу обычным способом, если интерфейс откликается. На Mac попробуйте «Завершить принудительно» из меню Apple или Cmd+Option+Esc.
  2. Найдите PID: pgrep -l имя или ps aux с поиском.
  3. Отправьте обычный сигнал: kill PID.
  4. Подождите несколько секунд и проверьте, исчез ли процесс: ps -p PID. Если команда ничего не показывает, процесс завершён.
  5. Если процесс остался, отправьте kill -9 PID.
  6. Убедитесь, что нужная программа запущена заново и работает корректно.

Принудительное завершение имеет цену: несохранённые данные теряются, временные файлы остаются, а блокировки базы данных или файлов могут не сняться. После kill -9 у программы иногда нужно удалить файл блокировки или проверить целостность данных. Для баз данных и служб, которые пишут на диск, жёсткое завершение — крайняя мера, а лучше воспользоваться штатной командой остановки службы.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

pkill, killall и осторожность с шаблонами

Если процессов с одним именем много, например несколько окон одной программы, удобны команды по имени. pkill имя отправляет сигнал всем процессам, чьё имя содержит указанный фрагмент, а killall имя делает то же по точному имени. Поведение killall отличается между системами: в Linux он завершает по имени, а в некоторых Unix-системах команда с таким названием останавливает почти всё, поэтому проверяйте документацию.

Совет по безопасности: перед массовым завершением выполните pgrep -l с тем же шаблоном и посмотрите, кто попадёт под удар. Короткий фрагмент вроде «a» или «ssh» может совпасть с десятками процессов, среди которых окажутся нужные службы или ваша собственная сессия.

Кроме того, учтите права. Обычный пользователь завершает только свои процессы, чужие требуют sudo. Это ограничение защищает вас, а не мешает. Не завершайте процессы с PID 1 и системные службы, название и роль которых вам не известны: в лучшем случае пропадёт часть функций, в худшем система перезагрузится.

Когда kill -9 не помогает

Бывает, что даже принудительный сигнал не убирает процесс. Основные случаи:

  • процесс в состоянии ожидания ввода-вывода (в ps он помечен буквой D): он ждёт ответа от диска или сетевой папки, и сигнал сработает, когда операция завершится; причину ищут в устройстве или подключении;
  • зомби-процесс (в ps отмечен буквой Z): он уже завершился, а родитель не забрал его статус; убить зомби нельзя, нужно завершить или перезапустить родительский процесс;
  • процесс принадлежит другому пользователю или системе, и нужны права администратора;
  • программа автоматически перезапускается службой-надсмотрщиком, поэтому её надо останавливать штатной командой службы, а не сигналом.

Если Mac или компьютер повисает целиком и новые окна не открываются, помочь могут только перезагрузка или удержание кнопки питания, но это крайняя мера. Чтобы потом разобраться в причине, сохраните записи журнала: в Linux через journalctl, в macOS через «Консоль». Повторяющееся зависание одной и той же программы — повод искать обновление, проверять диск и память, а не просто убивать процесс каждый раз.

Как не допустить повторения

Завершение процесса лечит симптом, а не причину. Если одна и та же программа зависает регулярно, имеет смысл выяснить, почему. Посмотрите по top или Activity Monitor, растёт ли потребление памяти со временем: постоянный рост намекает на утечку, а скачок процессора при определённом действии — на ошибку в конкретной функции или на конфликт с другой программой.

Проверьте свободное место на диске и состояние памяти: нехватка того или другого часто делает систему вялой, и тогда виновата не одна программа. Обновите зависающую программу и систему: многие сбои исправляются в обновлениях. Посмотрите журнал на момент зависания, через journalctl.

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

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
linuxmacosпроцессыkill

Часто задаваемые вопросы

Читайте также