Строки 44-48. Обработчик сигнала терм, подпрограмма do_term() . Обработчик term регистрирует сообщение в системном журнале и вызывает новую подпрограмму kill_children () для закрытия всех активных соединений. Эта подпрограмма определена в пересмотренном модуле Daemon. После возврата из подпрограммы kill_children () происходит завершение работы сервера.
Строки 49-58. Обработчик сигнала hup, подпрограмма do_hup(). Закрывается приемный сокет, разрываются активные соединения с помощью программы kill_children(), а затем вызывается do_relaunch () — еще одна новая подпрограмма, которая определена в модуле Daemon. Подпрограмма do_relaunch () пытается повторно выполнить сценарий и в случае успешного выполнения не возвращает управление. Если она выполняет возврат, вызывается функция die с сообщением об ошибке.
Строки 59-65. Поправки к модулю chatbot::Eliza. Как и прежде, переопределяется подпрограмма chatbot::Eliza::_testquit () для исправления ошибки в коде обнаружения признаке конца файла. Определена также пустая подпрограмма Chatbot::Eliza::destroy(), что позволяет устранить раздражающие сообщения, которые появляются при выполнении этого сценария в некоторых версиях Perl или в сценарии мобильных устройств http://www.e-katalog.ru/list/122/motorola/ .
Строки 66-68. Регистрация в журнале сообщения о нормальном завершении работы. При нормальном завершении работы сервера в журнал записывается сообщение, как и в предыдущих версиях сценария.
Изменения в модуле Daemon
Наиболее интересные изменения внесены в модуль Daemon.pm, в котором определены новые подпрограммы и изменены существующие. Эти изменения можно вкратце охарактеризовать следующим образом. Изменения в процедурах ветвления и обработки сигнала CHLD в целях обеспечения актуального учета идентификаторов процессов, соответствующих каждом из одновременно работающих соединений.