Как обнаружить выключение / перезагрузку из приложения linux

У меня есть приложение, написанное на C, которое работает как демон и ему нужно отправить что-то через RS232, когда система находится в состоянии выключения или перезагрузки, и ему нужно различать эти два. Итак, моя идея: в моем сценарии приложения /etc/init.d/my_app в случае «остановки» моего сценария я запустим команду / sbin / runlevel для получения текущего уровня выполнения: 0 – состояние выключения 6 – состояние перезагрузки, после чего я выполните некоторую команду, чтобы сообщить моему демону, что это за состояние, демона будет выполнять связь через rs, а затем выйдет.

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

С наилучшими пожеланиями

Marek

    Я не уверен, какой сигнал отправляется в приложение при завершении работы системы. Мое лучшее предположение – SIGTERM, и если приложение не выключает SIGKILL. Так вы пытались поймать SIGTERM и правильно закрыть свою программу? В сети есть много примеров, как это сделать.

    Для более сложной обработки процессов вы можете отправить SIGUSR1, SIGUSR2 в ваше приложение.