Я пишу приложение для Linux, которое требует от меня перехватывать системные события, такие как:
и необходимо выполнить некоторые функции, основанные на этом. Например:
Может кто-нибудь сказать, пожалуйста, как отлавливать системные события в C / Linux?
П.С .: Я не говорю о событиях «файловой системы»: P
Нет понятия «системное событие». Вам необходимо указать, какие события нужно обрабатывать, и реализовать соответствующий механизм для обработки каждого из них:
Запуск системы: init
скрипты вызовов процессов из /etc/init.d
во время запуска. Точная инфраструктура немного отличается между дистрибутивами, но База стандартов Linux Инициализация системы должен вообще работать на всех.
Вход / выход пользователя из системы: LSB также определяет интерфейс к Сменные модули аутентификации библиотека. Вы можете реализовать разделяемую библиотеку, которая будет вызываться при входе в систему (а также другие действия, требующие аутентификации и авторизации). В зависимости от того, что вы хотите сделать, уже может быть модуль, который будет работать для вас, поэтому попробуйте сначала найти его. В любом случае я не думаю, что существует независимый от дистрибутива способ его установки, и даже в данном дистрибутиве вы должны учитывать, что администратор мог внести пользовательские изменения, поэтому для установки потребуется ручное вмешательство администратора.
Сбои приложения: вам придется его использовать.
Я думаю, вы должны рассмотреть чтение системных журналов — все, о чем вы спрашиваете, записывается в системный журнал (для стандартной конфигурации). Если ваша система использует syslog-ng, вы можете даже настроить его для прямой записи в вашу программу, см. http://www.syslog.org/syslog-ng/v2/#id2536904 для деталей. Но даже с любым другим демоном системного журнала вы всегда можете прочитать файл (или файлы) из / var / log так же, как tail -f
действительно, конец реагировать на конкретные сообщения.
Я не уверен насчет обнаружения сбоев приложений — есть опция ядра для регистрации каждого SIGSEGV в пользовательских процессах, но AFAIK он доступен только на архитектуре ARM — в крайнем случае будет инструмент вашего приложения (как указал Ян Худек) для регистрации чего-либо в системный журнал.