убить -9 и производственное приложение - PullRequest
6 голосов
/ 05 июня 2010

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

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

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

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

Но эта статья утверждает:

Аргумент -9 (или KILL) для kill (1) никогда не должен использоваться в системах Unix

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

Ответы [ 4 ]

4 голосов
/ 05 июня 2010

kill -9 не дает приложению возможности чисто завершить работу.

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

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

2 голосов
/ 05 июня 2010

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

1 голос
/ 06 июня 2010

Это зависит от типа приложения.

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

Хотя Crash-only является хорошим принципом, в настоящее время ему соответствуют немногие приложения.

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

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

0 голосов
/ 05 июня 2010

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

...