Отправка этого вопроса, потому что я был удивлен, что не нашел на него прямой ответ; извиняюсь, если это дубликат - я посмотрел!
Я слышал это kill -9
или kill -SIGKILL
плохо, но я не понимаю, почему. Если я не должен, kill -9
что я должен сделать, чтобы убить процесс?
kill -9
так », OP - « отлично, это сработало! Теперь я буду помнить об этом! », И В приходит, чтобы предупредить « ждатьkill -9
опасно! » Только после факта.Ответы:
SIGKILL
вытаскивает коврик из вашего рабочего процесса, немедленно прекращая его. Для очень простых программ это хорошо; однако на практике очень мало «простых» программ.Под прикрытием даже тривиально кажущиеся программы выполняют все виды транзакционной работы, от которой им необходимо очиститься перед завершением (например,
finally
блок в Java и других языках программирования), такие как закрытие дескрипторов ресурсов, удаление временных файлов и удаление данных из память на диск. Вы не можете предвидеть, когда программа может делать что-то подобное.Если вам повезет, вы не заметите ничего плохого, если отправите
SIGKILL
, но вы не можете быть счастливым вечно, и вы можете не знать, что что-то пошло не так, пока не станет слишком поздно, чтобы восстановить то, что было потеряно.Вам почти никогда не нужно отправлять сообщение
SIGKILL
, и вы должны быть уверены, что исчерпали свои альтернативы, прежде чем сделать это. Во многих случаях перезагрузка (которая в конечном итоге приведетSIGKILL
к неправильной работе программ) безопаснее, чем отправкаSIGKILL
вручную. Я, вероятно, могу посчитать с одной стороны, сколько раз мне нужно было отправитьSIGKILL
(и, вероятно, все мои собственные работы).Вообще говоря, вы можете использовать Ctrl+ C(который отправляет приоритетный процесс a
SIGINT
) илиSIGTERM
(как в «завершить»), чтобы дать команду процессу остановить то, что он делает, и выйти.Некоторое дальнейшее чтение:
kill
сигналами-9
значит?kill
сигналовисточник