Материал просмотрен 1,322 раз(а)

Пришло время убивать! Ну то есть изучить команду kill. Пусть вас не пугает страшное название, kill делает намного больше, чем просто завершает работу процесса. Главное назначение утилиты – быть сигнальным механизмом, посредством которого процессы могут давать друг другу самые разнообразные команды. Любой пользователь может использовать утилиту для подачи сигнала своим процессам, но только root может посылать сигналы совершенно произвольным процессам в системе. Ну царь и бог, естественно!

Сигналы завершения работы процесса

Самое простое и распространённое применение kill – это прекращение работы процесса. Воспользуюсь нашей “флудилкой” из примера утилиты top, найдём PID процесса и завершим его:

На самом деле утилита kill посылает процессу только один вид сигнала – TERM. Это сообщение – своеобразный сигнал выхода, которое понимают все программы UNIX, однако не все его слушаются. Существуют и другие типы сигналов:

Сигнал
Символическое имя
Назначение
1
HUP
Отбой (завершение и перезапуск)
2
INT
Прерывание
3
QUIT
Выход
6
ABRT
Аварийное завершение
9
KILL
Неигнорируемое уничтожение
14
ALRM
Сигнал тревоги
15
TERM
Нормальное прекращение работы

Как использовать подачу сигналов?

Мы можем использовать любой сигнал просто определив номер сигнала, либо его символическое имя:

Эту команду следует использовать только в случае крайней необходимости, когда остальные варианты не возымели успеха. Сигнал 9 заставляет процесс прекратить свою работу “грязным” образом и может оставить открытые файлы или подвисшие соединения. Оставив груды “мусора”, программа kill -9 всё-таки может спасти жизнь серверу, но всегда нужно чётко знать о последствиях. Лучше сначала попытаться жахнуть по процессу 15-ым кодом (TERM).

Процессы-зомби

Следует помнить, что программа kill не является супер-мега средством для уничтожения процессов. В некоторых случаях kill -9 не завершает процесс, который перестал отвечать на сигналы. Некоторые процессы в определённых условиях могут превратиться в “зомби” (zombie), что означает, что они сами не “умрут” и убить из больше нельзя. Большинство из таких процессов просто “живут” до перезагрузки и не занимают много ресурсов системы.