Я работаю над приложением, где я должен обнаружить завершение работы системы. Однако я не нашел, что любой надежный путь получает уведомление на этом событии.
Я знаю, что на завершении работы, мое приложение получит a SIGTERM
сигнал сопровождается a SIGKILL
. Я хочу знать, существует ли какой-либо способ запросить если a SIGTERM
часть последовательности завершения работы?
Кто-либо знает, существует ли способ запросить тот программно (C API)?
Насколько я знаю, система не предоставляет никакой другой метод для запросов для нависшего завершения работы. Если бы это делает, который решил бы мою проблему также. Я испытывал runlevels
также, но изменение в runlevels
кажется, мгновенен и без любых предшествующих предупреждений.
Невозможно определить, является ли SIGTERM
частью последовательности завершения работы. Чтобы определить последовательность завершения работы, вы можете либо использовать сценарии rc.d
, такие как ereOn и Эрик Сепансон, либо использовать механизмы, такие как DBus.
Однако с точки зрения разработки нет смысла игнорировать SIGTERM
, даже если это не является частью завершения работы. Основная цель SIGTERM
- вежливо попросить приложения выйти правильно, и маловероятно, что кто-то с достаточными привилегиями выдаст SIGTERM
, если он / она это сделает не хочу, чтобы приложение выходило.
Заставить ваше приложение реагировать на одни сигналы SIGTERM иначе, чем на другие, кажется непрозрачным и потенциально сбивающим с толку. Можно утверждать, что вы всегда должны одинаково реагировать на данный сигнал. Добавление необычных условий затрудняет понимание и тестирование поведения приложения.
Добавление сценария rc, который обрабатывает завершение работы (отправляя специальный сигнал), является полностью стандартным способом решения такой проблемы; если этот сценарий установлен как часть стандартного пакета ( make install
или пакет rpm / deb), не следует беспокоиться об управлении пользовательскими машинами.
Когда система выключается, Вызываются скрипты rc.d
.
Может быть, вы можете добавить туда сценарий, который посылает какой-то особый сигнал вашей программе.
Однако я сомневаюсь, что таким образом можно остановить выключение системы.