Использование сервера `killall -9; ./server & `для перезапуска службы Unix - длительные проблемы? - PullRequest
2 голосов
/ 22 февраля 2012

В моей компании я видел использование killall -9, чтобы убивать демонов и затем запускать их снова. (Который действительно должен быть killall -SIGKILL)

Я пытаюсь объяснить коллегам, что на самом деле мы не должны перезапускать демонов. Возможно, используйте символ SIGINT, чтобы процесс мог корректно завершить работу, или используйте сценарии init.d для правильного перезапуска службы.

Мы программируем на C, может ли что-нибудь произойти, что будет вредным для системы от выполнения SIGKILL? Очевидно, что этот сигнал не может быть перехвачен процессом, поэтому никакие внутренние обработчики сигналов не могут выполнить какую-либо хорошую обработку выключения, но

  • Будут ли корректно очищены буферы чтения / записи файла?
  • Правильно ли будет динамически восстанавливаться память?
  • Есть еще примеры?

Я мог догадаться по ответам на эти вопросы, но знает ли кто-нибудь ответы? Может кто-нибудь расширить свои знания Unix, чтобы помочь мне? Вооружившись конкретными знаниями, я могу привести гораздо лучший аргумент!

1 Ответ

2 голосов
/ 22 февраля 2012

а.Буферы чтения / записи.Вот простой эксперимент, который, мы надеемся, «докажет» вашим коллегам, что ненормальное прекращение - это плохо.Выполните этот Perl-скрипт, и пока он спит, kill -9 it:

#!/usr/bin/perl
open FILE, ">file.txt" or die $!;
print FILE "This is it";
sleep 100;
close FILE;

На моей машине file.txt пуст, если я убью до 'close' => выглядит как аварийное завершениеможет означать потерю данных .Подробнее об этом при принятом ответе на этот вопрос: Что произойдет, если я не вызову fclose () в программе на C?

b. Динамически выделенная память освобождена .По сути, это блок памяти в области памяти программы, который называется «куча».Программа просит ОС отрегулировать размер кучи в зависимости от динамического распределения, и ОС знает пределы этого блока.Даже на чистой exit программе, если она имеет утечки памяти, эта память восстанавливается.

...