2014-12-01 4 views
0

Я хочу обнаружить, что система перезагружается, прежде чем она завершит мою программу в Linux. Я попытался использовать файл/var/run/utmp для обнаружения уровня запуска, поместить inotify на его изменения, но похоже, что система закрывает эту программу, прежде чем я получу сигнал. Я улавливаю выключение с ним, если я устанавливаю уровень запуска с помощью команды telinit, но не поймаю, если я просто перезапущу с кнопкой в ​​верхнем правом углу в Ubuntu.Как обнаружить перезапуск перед завершением программы на Linux

Любая идея, как это можно сделать?

+2

Обычно перезагрузка отправляет ваш процесс 'SIGTERM'. Почему ты не можешь это поймать? См. [Signal (7)] (http://man7.org/linux/man-pages/man7/signal.7.html) –

+0

Как программа, работающая на коробке, это ваша компания, чтобы знать, почему вы завершаете работу, не хотите ли вы просто сохранить состояние, если оно есть, и выйти в любом случае? –

ответ

3

Поймать сигнал SIGTERM и быть быстрым с сохранением/делать все, а затем выйти. У вас есть примерно 10 секунд, прежде чем вы получите SIGKILL, который вы не можете поймать, и вы будете прекращены.

Если система не отправляет вам SIGTERM, чтобы обеспечить надлежащее завершение работы, измените систему на что-то надлежащее, это стандартный способ ее выполнения.

См. man 7 signal и man 3 sigaction для обработки сигналов.

(Обратите внимание, что я не знаю стандартным способом, чтобы проверить, если система перезагружается или нет, я не думаю, что такая вещь существует. Но, как упоминалось выше, надлежащая система будет отправить вам SIGTERM и разрешите вам выполнить очистку/выход. Исправлена ​​жесткая перезагрузка, потому что это почти эквивалентно вытягиванию шнура питания.)

+0

Вы имеете в виду catch sigterm, а затем проверяете уровень запуска? –

+0

@JaniBaramidze Я не знаю стандартного способа проверить, перезагружена ли система. У меня нет runlevels в моей системе, так как я запускаю systemd, например. Улавливая 'SIGTERM', вы решаете проблему перезагрузки и вводите надлежащее завершение работы, когда, например, диспетчер процессов хочет закрыть вас по любой другой причине. – Jite

+0

@JaniBaramidze Почему вам нужно отделить «до перезагрузки» и «регулярное выключение»? – Jite

 Смежные вопросы

  • Нет связанных вопросов^_^