Перехват системных событий в C Linux

Я пишу приложение для Linux, которое требует от меня перехватывать системные события, такие как:

  1. Перезагрузка системы
  2. Пользователь ‘xyz’ входит в систему
  3. происходит сбой приложения xyz и т. д.

и необходимо выполнить некоторые функции, основанные на этом. Например:

  1. Запустить скрипт резервного копирования
  2. Запустите программу восстановления и т. Д.

Может кто-нибудь сказать, пожалуйста, как отлавливать системные события в C / Linux?

П.С .: Я не говорю о событиях «файловой системы»: P

3

Решение

Нет понятия «системное событие». Вам необходимо указать, какие события нужно обрабатывать, и реализовать соответствующий механизм для обработки каждого из них:

  • Запуск системы: init скрипты вызовов процессов из /etc/init.d во время запуска. Точная инфраструктура немного отличается между дистрибутивами, но База стандартов Linux Инициализация системы должен вообще работать на всех.

  • Вход / выход пользователя из системы: LSB также определяет интерфейс к Сменные модули аутентификации библиотека. Вы можете реализовать разделяемую библиотеку, которая будет вызываться при входе в систему (а также другие действия, требующие аутентификации и авторизации). В зависимости от того, что вы хотите сделать, уже может быть модуль, который будет работать для вас, поэтому попробуйте сначала найти его. В любом случае я не думаю, что существует независимый от дистрибутива способ его установки, и даже в данном дистрибутиве вы должны учитывать, что администратор мог внести пользовательские изменения, поэтому для установки потребуется ручное вмешательство администратора.

  • Сбои приложения: вам придется его использовать.

4

Другие решения

Я думаю, вы должны рассмотреть чтение системных журналов — все, о чем вы спрашиваете, записывается в системный журнал (для стандартной конфигурации). Если ваша система использует syslog-ng, вы можете даже настроить его для прямой записи в вашу программу, см. http://www.syslog.org/syslog-ng/v2/#id2536904 для деталей. Но даже с любым другим демоном системного журнала вы всегда можете прочитать файл (или файлы) из / var / log так же, как tail -f действительно, конец реагировать на конкретные сообщения.

Я не уверен насчет обнаружения сбоев приложений — есть опция ядра для регистрации каждого SIGSEGV в пользовательских процессах, но AFAIK он доступен только на архитектуре ARM — в крайнем случае будет инструмент вашего приложения (как указал Ян Худек) для регистрации чего-либо в системный журнал.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector