Вопрос

Какая проблема может вызвать kill -9 в производственном приложении (в Linux, если быть точным)?

У меня есть приложение, которое выполняет некоторую периодическую работу, останавливая их, занимает много времени, и мне все равно, если некоторые задания будут прерваны - работа может быть завершена с помощью новых процессов. Так могу я использовать kill -9 Просто чтобы немедленно остановить это или это может вызвать серьезные проблемы с ОС?

Например, Единорог, использует его в качестве обычной рабочей процедуры:

Когда ваше приложение идет не так, Bofh может просто «убить -9» процесса сбежавшего работника, не беспокоясь о том, чтобы разорвать всех клиентов, только один.

Но это статья претензии:

Аргумент -9 (или убийство) для убийства (1) никогда не следует использовать в системах UNIX

PS: я понимаю, что kill -9 Нельзя обрабатывать приложением, но я знаю, что для мая это не вызывает никаких проблем, я просто заинтересован, может ли это вызвать некоторые проблемы на уровне ОС? shared memory segments active, lingering sockets Звучит для меня опасно.

Это было полезно?

Решение

Это зависит от того, что это за применение.

Что -то вроде базы данных может либо потерять данные (если он не записывает все свои данные в постоянный журнал транзакций одновременно), либо потребуется больше времени, чтобы запустить в следующий раз, или оба.

Несмотря на то что Только авария является хорошим принципом, лишь немногие приложения в настоящее время соответствуют этому.

Например, база данных MySQL не является «только сбоем», а убийство с убийством -9 приведет либо к значительно более длительному времени запуска (чем чистое отключение), потери данных или оба, в зависимости от настройки (и в некоторой степени , удача).

С другой стороны, Кассандра На самом деле поощряет использование убийства -9 в качестве механизма отключения; он не поддерживает ничего другого.

Другие советы

kill -9 не дает заявлению шанс отключиться чисто.

Обычно приложение может поймать SIGINT/SIGTERM и выключите чисто (закрыть файлы, сохранять данные и т. Д.). Приложение не может поймать SIGKILL (что происходит с kill -9) и поэтому он не может сделать что -либо из этого (необязательно) очистки.

Лучшим подходом является использование стандарта kill, и если приложение остается без реагирования, то используйте kill -9.

kill -9 не вызовет никаких «серьезных проблем с ОС». Но процесс немедленно прекратится, что означает, что он может оставить данные в нечетном состоянии.

Сигнал убийства не может быть пойман применением. Если приложение находится в середине написания некоторой сложной структуры данных для диска, когда вы его убивают, структура может быть лишь наполовину написанной, что приведет к повреждению файла данных. Обычно лучше всего реализовать какой -то другой сигнал, такой как пользователь1 в качестве сигнала «остановки», так как его можно поймать, и позволяет приложению отключаться контролируемым образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top