Я заметил, что в Fedora 17 операция выключения (например, shutdown -h сейчас) стала намного быстрее (максимум 2 секунды). Поэтому мне интересно, если запущенные процессы завершены правильно? Особенно на Fedora (опять же, около 2 секунд), я с трудом могу себе представить, что у каждого процесса есть достаточно времени для завершения.

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

Поэтому я написал крошечную небольшую программу, которая улавливает большинство сигналов, и, если указано число (секунд), она будет ждать перед выходом. Кроме этого, он ничего не делает. Затем - сначала в системе Debian - я запустил его с задержкой в 60 секунд. Когда он получил SIGHUP (я предполагаю, что его родительская оболочка была прервана), он начал 60-секундный обратный отсчет. Через 10 секунд он получил дружественный SIGTERM. Моя программа проигнорировала этот сигнал и продолжила обратный отсчет - до секунд 40, когда он трагически погиб. Таким образом, через 20 секунд после того, как ему сказали прекратить (SIGHUP), он был SIGKILLed.

Теперь тот же тест на Fedora 17 (3.5.3-1.fc17.x86_64):

Пойманный сигнал 1.
Продолжительность: 8 секунд
Задержка завершения на 60 секунд ...
60 ...
Поймал сигнал 15 - игнорируя!
59 ...
58 ...

Даже через одну секунду после SIGHUP он получает SIGTERM. Программист может отложить завершение своей программы после SIGTERM, чтобы завершить работу, сохранить настройки и так далее (в отличие, может быть, после SIGINT). Моя программа получает 2 секунды, прежде чем она будет убита.

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

1 ответ1

1

Службы могут указать, как они хотят быть прекращены в их *.service файле. Вы можете выбрать любое время ожидания, вам не нужно жить по умолчанию. Если у вас установлен postgreSQL или mysqld, посмотрите их служебные файлы, чтобы увидеть, как они организуют чистое завершение работы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .