Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Разработка фонового процесса

Поиск

К фоновому процессу выставляют такие требования: он должен образовывать собственную сессию и группу процессов, не может принадлежать к ни одной из сессий и групп пользователя и иметь управляющий терминал.

Причины выдвижения этих требований приведены ниже.

Демон не может иметь управляющий терминал, поскольку не должен реагировать на прерывание в случае попыток введения-выведения с использованием такого терминала.

Демон должен быть лидером фоновой группы процессов и лидером новой сессии, чтобы он не мог получать сигналы (например, в случае нажатия Ctrl+С или выходу из системы).

После запуска демон закрывает все открыты файлы, особенно стандартные потоки ввода-вывода, поскольку они должны быть закрыты после выхода пользователя из системы, а демон должен продолжать работу и после этого.

Для того, чтобы придерживаться всех требований, в демоне нужно выполнить определенную последовательность действий.

1. Сразу после запуска процесс демона должен создать потомка:

if ((pid = forko) < 0) return -1;

Это нужно для того, чтобы сразу вернуться в командный процессор, выйдя из предка на шаге 2. Чтобы новый процесс гарантированно не мог стать лидером группы процессов, потому что он наследует эту группу от предка - это нужно позже для вызова setsid() на шаге 3.

2. После создания потомка предок должен завершить свою работу:

if (pid!= 0) { // предок

printf ("демон стартовал из pid=%d\n". pid):

exit (0); }

3. Другие шаги происходят в потомке. В нем нужно выполнить определенную последовательность действий.

· Создать новую сессию:

setsid();

Текущий процесс в результате вызова setsid(), как было сказано раньше, становится лидером новой сессии, лидером группы процессов и не имеет управляющего терминала. Главный смысл этого вызова - отключиться от управляющего терминала и потерять связь с текущей сессией, чтобы не получать никаких сигналов.

· Изменить текущий каталог на корневой каталог системы или конкретный рабочий каталог демона:

chdir(“/"):

Если этого не сделать, текущий каталог демона всегда будет тем, из которого он запущен. Здесь есть риск, что текущим может оказаться каталог, который вмонтирован в файловую систему (в этом случае ее нельзя будет размонтировать, пока демон не закончит работу).

· Возможно, закрыть все открыты файлы (файловые дескрипторы):

// закрыть заранее определеные дескрипторы

for (fd = 0: fd < 3; fd++) close(fd);

· Перейти в режим ожидания (уже были рассмотрены разные способы задания ожидания в серверных процессах, самый простой способ - выполнить вызов pause () в цикле):

for (;:) pause();

После запуска демон будет лидером сессии (pid=sid), лидером группы процессов (pid=pgid) и не будет иметь управляющего терминала, а его предком станет init, поскольку непосредственный предок прекратил выполнение.

 

Службы Windows XP

Аналогом демонов у Windows XP являются службы (services) - фоновые процессы, которые могут выполняться даже тогда, когда с системой не работает ни один пользователь. Из раздела 2 уже известно о том, что за управление службами отвечает менеджер служб (Service Control Manager). Он принимает управляющие команды от приложений и в соответствии с ними выполняет действия со службами (например, запускает на выполнение или останавливает).

Интерфейс пользователя менеджера служб реализован двумя способами:

♦ С с помощью окна управления службами (Services), которое вызывают через подменю Administrative Tools главного меню системы (это окно отображает список служб, дает возможность запускать и останавливать отдельные службы, узнавать об их свойствах и тому подобное);

♦ С помощью утилиты net.exe, что входит в поставку Windows XP; например, команда net start имя_служби дает команду менеджеру запустить соответствующую службу, net stop имя_служби - остановить ее.

Для управления службами необходимо иметь административные права в системе.



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 126; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.201.46 (0.005 с.)