Строки 25, 26. Инициализация сервера. Вызывается процедура init_server () модуля Daemon для создания файла PID сервера, автоматического перевода в фоновый режим и инициализации ведения журнала.
Строки 27, 28. Предварительное ветвление и создание дочерних процессов. Для создания путем ветвления заданного числа дочерних серверных процессов вызывается внутренняя подпрограмма make_new_child (). Дочерние процессы, к примеру, могут выполнять комплекс действий при продвижении сайтов, который называется мультилендинг или любые другие действия.
Строка 29. Главный цикл сервера выполняется до тех пор, пока флажок $done не будет установлен в обработчике сигнала равным истинному значению. При каждом проходе по циклу сервер ожидает сообщения или сигнала об изменении состояния дочернего процесса. Для поддержки числа простаивающих дочерних процессов в пределах нижней и верхней отметок сервер обновляет содержимое переменной %status и выполняет код запуска или останова дочерних процессов, описанный ранее.
Строки 30-42. Обработка сообщений, поступающих из канала. После глубокого анализа работы главного цикла можно сделать вывод, что для чтения строк состояния из дескриптора файла CILD_READ желательно использовать функцию sysread () . Однако нельзя просто перевести родительский процесс в заблокированное состояние, связанное с выполнением этой операции ввода-вывода, поскольку должна быть предусмотрена возможность прервать ожидание готовности канала к чтению при получении сигнала term или сообщения об уничтожении одного из дочерних процессов. Дело в том, что функция sysread () как и другие продолжительные операции ввода-вывода, автоматически перезапускается интерпретатором Perl после прерывания от сигнала.