Пришло время убивать! Ну то есть изучить команду 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), что означает, что они сами не “умрут” и убить из больше нельзя. Большинство из таких процессов просто “живут” до перезагрузки и не занимают много ресурсов системы.
> «зомби» (zombie), что означает, что они сами не «умрут» и убить из больше нельзя. Большинство из таких процессов просто «живут» до перезагрузки и не занимают много ресурсов системы.
К сожалению, это не всегда так. Очень запросто имея зомби можно получить ошибку типа “progname already running but not responding”, т. е. старый экземпляр программы не работает, а новый не создаётся. Так может быть, например, с firefox или totem.
Так что вопрос “как закопать зомби?” вполне актуален. И telinit, если что, не помогает.