КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Процессы-демоны. Система журнализации.Под демоном понимается процессы, не предназначенные для непосредств. взаимодействия с пользователями с-мы. Существует демоны внутрисистемные. Демоны обычно рассчитаны на длительное функционирование и в некоторых с-мах огни могут работать годами без перезапуска => при его запуске принимаются меры чтобы его функционирование не мешало работе проуесса и администрированию системы. Текущий каталог обычно меняется на корневой (чтобы не мешать админу удалять каталоги и т.д.). Демону не нужен управляющий терминал, дескрипторы стандартного I/O и вывод ошибок, но желательно чтобы дескрипторы 0,1,2 оставались открытыми, потому что демоны обычно работают с файлами т.к. если файл будет открыт с дескриптором 0,1,2 , то какая-нить процедура может случайно испортить файл =>все 3 дескриптора связывают с устройством dev/NULL – символьное потоковое уст-во, яв-ся чисто логическим. Все что в него записывается – исчезает. Чтобы действие производимые с терминалом не влияли надемона, он обычно работает в отдельном сеансе. Процедура старта процесса-демона: Close(0); …(1); // Закрываем стандартные дескрипторы …(2); // Связываем с dev/NULL: Open(“/dev/NULL”,O_RDONLY); - чтение Open(“/dev/NULL”,O_WRONLY); - запись Open(“/dev/NULL”,O_WRONLY); - ошибки // Дальше fork и запуск If (fork()>0) exit(0); - завершение родит. процесса. Setsid(); Chdir(“/”); Т.к. с терминалом процесс-демон не связан, то сообщения об ошибках и др. передаются альтернативным способом. Обычно это делается через инфраструктуру системной журнализации: Void openlog (const char *ident, int option, int facility); - открытие Void syslog (int priority, const char *format,..); - послать сообщение демону Void closelog (void); - закрытие
Есть еще модификация syslog – либо пишет сообщение в системный журнал, либо отправляет его на консоль, либо перенаправляет в соотв-е со списком пользователей системы (etc/syslog.conf). Параметры: · Ident – это строка будет выдаваться перед каждым сообщением программы. Чтобы начать работу с журналом прога вызывает openlog, передает первым параметром свое название , указ-ся некоторые дополн опции. · Через параметр facility указывается к какой подсистеме относится данная программа. Если подсистема не имеет спец значение, то ставится LOG_USER. Функция syslog похожа на printf. · Priority – степень важности сообщения: LOG_ERR – ошибки LOG_WARN – предупреждения LOG_INFO – информационные сообщения Сисадмин может настроить все т.о., чтобы в файл журнала попадали сообщения с опред уровнем важности. Например: syslog(LOG_INFO,”demon with pid=%d”, getpid()); · Функция closelog завершает работу с системой журнализации, закрывает открытые файлы и т.д.
Управление процессами-демонами можно осуществлять через сигналы SIG_HUB демон переписывает конфигурац. Файл и при необходимости даже меняется режим работы.
|