KILL — Завершение процессов (up25)

Установка, настройка, эксплуатация.

Модератор: ROOT

KILL — Завершение процессов (up25)

Сообщение ROOT » 21 авг 2017, 10:01

Оглавление


KILL — завершение процессов в Linux/Unix
Введение
Иногда в системе появляется "зависший" процесс, который не реагирует ни на что.
Самое простое и известное средство — команда kill.
Но важно понимать, какие сигналы она посылает и в каких случаях применять каждый из них.


Поиск зависшего процесса
Посмотрим активные сеансы:
Код: выделить все
w
 21:16:47 up 4:03,  2 users,  load average: 1.09, 0.59, 0.52
 USER     TTY      FROM              LOGIN@   IDLE   JCPU  PCPU WHAT
 root     tty1                         20:14   57:19   0.06s 0.06s -bash
 root     pts/0   sergey6.free-adm    21:13    7.00s  0.03s 0.00s w

Допустим, сеанс на tty1 завис.
Найдём процесс, связанный с ним:
Код: выделить все
ps -ft tty1
UID        PID  PPID  C STIME TTY      TIME CMD
root      4703   699  0 20:14 tty1     00:00:00 -bash



Мягкое завершение (SIGTERM, SIGINT, SIGHUP)
Перед тем как применять "жёсткий" сигнал, попробуем мягкие варианты:
Код: выделить все
kill 4703           # SIGTERM (по умолчанию)
kill -INT 4703      # Прерывание (Ctrl+C)
kill -HUP 4703      # "Повесить трубку" — используется демонами для перезагрузки конфигурации

Если процесс всё ещё жив, можно убедиться:
Код: выделить все
ps -p 4703



Жёсткое завершение (SIGKILL)
Если другие сигналы не сработали:
Код: выделить все
kill -9 4703

Теперь проверяем:
Код: выделить все
w
 21:23:04 up 4:09, 1 user, load average: 0.31, 0.47, 0.49
 USER    TTY     FROM             LOGIN@   IDLE  JCPU  PCPU WHAT
 root    pts/0   sergey6.free-adm 21:13     0.00s 0.03s 0.00s w

Сеанс на tty1 пропал — процесс завершён.


Почему kill -9 — не панацея
  • SIGKILL не перехватывается и не обрабатывается — процесс просто исчезает, не успев очистить ресурсы.
  • Это может привести к "мусору" в системе: висячие сокеты, открытые файлы, блокировки, осиротевшие дочерние процессы.
  • Иногда даже kill -9 не помогает — если процесс "завис" в ядре (например, ожидает I/O на NFS-точке).
Рекомендации
СитуацияДействие
Обычный зависший процессkill PID (SIGTERM)
Не реагируетkill -INT PID, kill -HUP PID
Не убиваетсяkill -9 PID — только как крайняя мера
Не умирает даже от -9Проверить состояние системы (D-статус), возможно, завис драйвер или файловая система. Поможет только перезагрузка.



Дополнительно
  • Для массового завершения процессов используйте
    Код: выделить все
    pkill
    или
    Код: выделить все
    killall
    .
  • Чтобы увидеть процессы, "висящие" в D-состоянии (неубиваемые):
    Код: выделить все
    ps -eo pid,stat,cmd | grep D
  • Для предотвращения подобных ситуаций — следите за корректным завершением сервисов и используйте systemd-юниты с параметром
    Код: выделить все
    Restart=
    .


Заключение
kill -9 — инструмент "на крайний случай".
Если применять его с умом, можно безопасно управлять процессами, не рискуя повредить систему.
Главное правило администратора: сначала мягко, потом решительно.
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 2202 2083 5115 2302


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 464
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron