Intereting Posts
Отправка ключевых сигналов нажатия на фоновый процесс Есть ли программное обеспечение для Debian для исправления моего GRUB Сценарий оболочки для автоматического исключения и отключения приложения на основе системного времени большие серверы электронной почты, отправляемые с сервера, не могут идентифицировать Как просмотреть метаданные локальных / загруженных файлов .deb в Debian Как использовать булевы в раковине? Pidgin не подключается к MSN, заявляет «Недействительный ответ», Есть ли какой-либо веб-браузер, который использует keybinding, кроме uzbl? Почему Cygwin не использует мой .bashrc? Использование регулярного выражения для проверки того, работает ли процесс UNIX Как запустить веб-сервер perl с помощью systemd? Разница между двумя Linux-машинами Укажите монитор для консоли Linux Как отключить модуль гибких дисков от загрузки при загрузке в CentOs7? Курсор Vim подчеркивает неправильное положение

При завершении работы перед установкой аварийного сигнала отключите накопители?

Поэтому, основываясь на моем понимании процесса выключения Unix / Linux (который очень ограничен, я допускаю), я думаю, что в какой-то момент эти шаги происходят: 1. смонтированные диски размонтируются 2. сигнал завершения отправляется в запущенные приложения, что позволяет приложения для очистки перед выходом

Теперь, что происходит первым? Или № 1 вообще не происходит? Или заказ не гарантирован?

Причина, по которой я задаю этот вопрос, заключается в том, что я работаю над приложением, которое записывает данные в центральный файл конфигурации при выключении, где центральный файл конфигурации может быть размещен в любом месте. Я обеспокоен тем, что если центральный файл конфигурации находится на смонтированном диске, а # 1 – до # 2, то сохраненный путь, который у меня есть для центрального файла конфигурации, может быть более недействительным. Это имеет смысл?

Это зависит от системы init и от того, как она настроена. Но любая нормальная конфигурация позволяет системному программному обеспечению регистрировать крюк для запуска при завершении работы. С традиционным System V init, это файл в файле /etc/rc0.d . С традиционным BSD init, это код в /etc/rc.shutdown . С Upstart это событие изменения уровня запуска до 0 или 6. Список продолжается, поэтому поддержка пакетов для всех дистрибутивов там может быть большой частью работы (большинство авторов предоставили бы скрипт завершения работы для своего приложения и диспетчер распространения делает пакет, который регистрирует сценарий завершения работы в нужном месте).

После того, как все сценарии приложения будут выполнены, завершатся заключительные этапы завершения работы. Как правило, это включает в себя размонтирование всех файловых систем, кроме тех, где есть все еще открытые файлы, а затем уничтожения всех оставшихся процессов и, наконец, размонтирование оставшихся файловых систем (кроме корневого каталога, который повторно монтируется только для чтения) и остановки или перезагрузки компьютера. Обычно посылают все процессы на сигнал TERM, который является захватывающим, а затем через несколько секунд посылает сигнал KILL. Хотя процесс может попытаться отреагировать, время ограничено, и система не будет ждать.

Поэтому, если ваше приложение установлено как root, вам просто нужно зарегистрировать сценарий инициализации времени выключения. Если ваше приложение установлено непривилегированными пользователями, у вас не может быть гарантии, что вы сможете что-либо сделать во время фазы останова.

Обратите внимание, что в любом случае вы должны грациозно справляться с сбоем системы или сбоем питания. Действия Shutdown-time должны быть ограничены вещами, которые делают следующую загрузку более эффективной, не должно быть ничего, что абсолютно необходимо сделать.