Завис терминал Linux (SSH): как найти и принудительно убить процесс по PID
Симптомы зависшего процесса
Вы запустили программу в терминале SSH, нажатие Ctrl + C или Ctrl + Z не помогает, консоль не реагирует на ввод команд, либо процесс продолжает невидимо работать в фоне, потребляя 100% ресурсов.
Способы принудительного завершения процессов
1. Находим номер PID зависшего процесса
Откройте вторую сессию терминала SSH и выполните поиск:
ps aux | grep имя_программыВторой столбец слева — это числовой идентификатор PID (например, 25410).
2. Мягкое завершение (SIGTERM / сигнал 15)
sudo kill 25410Дает программе возможность корректно сохранить данные и закрыть файлы.
3. Безусловное уничтожение ядра (SIGKILL / сигнал 9)
Если процесс не закрылся через 5 секунд, применяем команду принудительного уничтожения:
sudo kill -9 254104. Быстрое убийство по имени (pkill / killall)
Чтобы не искать PID вручную, завершите все процессы с таким именем:
# Мягко:
sudo pkill python3
# Принудительно (kill -9):
sudo pkill -9 -f my_script.pyКак закрыть намертво зависшую сессию SSH клиента: Нажмите последовательно комбинацию: Enter → символ тильды ~ → точку . (SSH клиент немедленно разорвет зависшее соединение).
Частые вопросы (FAQ)
Почему процесс со статусом D (Uninterruptible Sleep) не убивается даже kill -9?
Процесс в состоянии D ожидает ответа от диска или сетевой файловой системы (NFS). Пока аппаратный контроллер не вернет ответ ядра, процесс убить невозможно без перезагрузки сервера.
Чем отличается pkill от killall?
Killall ищет точное совпадение имени исполняемого файла, а pkill умеет искать по шаблону регулярного выражения и аргументам командной строки (флаг -f).
Как убить все процессы определенного пользователя?
Выполните команду sudo pkill -u имя_пользователя.
Что означает сигнал SIGHUP (kill -1)?
Сигнал HUP сообщает процессу о необходимости перечитать свои файлы конфигурации без полной остановки работы.