Как обнаружить незаконченное завершение работы системы на Linux?

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

Я знаю, что на завершении работы, мое приложение получит a SIGTERM сигнал сопровождается a SIGKILL. Я хочу знать, существует ли какой-либо способ запросить если a SIGTERM часть последовательности завершения работы?

Кто-либо знает, существует ли способ запросить тот программно (C API)?

Насколько я знаю, система не предоставляет никакой другой метод для запросов для нависшего завершения работы. Если бы это делает, который решил бы мою проблему также. Я испытывал runlevels также, но изменение в runlevels кажется, мгновенен и без любых предшествующих предупреждений.

20
задан fduff 24 January 2016 в 09:01
поделиться

3 ответа

Невозможно определить, является ли SIGTERM частью последовательности завершения работы. Чтобы определить последовательность завершения работы, вы можете либо использовать сценарии rc.d , такие как ereOn и Эрик Сепансон, либо использовать механизмы, такие как DBus.

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

6
ответ дан 30 November 2019 в 00:19
поделиться

Заставить ваше приложение реагировать на одни сигналы SIGTERM иначе, чем на другие, кажется непрозрачным и потенциально сбивающим с толку. Можно утверждать, что вы всегда должны одинаково реагировать на данный сигнал. Добавление необычных условий затрудняет понимание и тестирование поведения приложения.

Добавление сценария rc, который обрабатывает завершение работы (отправляя специальный сигнал), является полностью стандартным способом решения такой проблемы; если этот сценарий установлен как часть стандартного пакета ( make install или пакет rpm / deb), не следует беспокоиться об управлении пользовательскими машинами.

3
ответ дан 30 November 2019 в 00:19
поделиться

Когда система выключается, Вызываются скрипты rc.d .

Может быть, вы можете добавить туда сценарий, который посылает какой-то особый сигнал вашей программе.

Однако я сомневаюсь, что таким образом можно остановить выключение системы.

1
ответ дан 30 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: