Этот учет ведется в подпрограмме launch__child () путем добавления PID каждого дочернего процесс к глобальному хешу %CHILDREN и в обработчике сигнала reap_child () посредством удаления дочерних процессов, завершивших работу, из хеша % CHILDREN.
Изменение кода ветвления с тем, чтобы дочерние процессы не наследовали обработчики прерываний родительского серверного процесса. Соображения лежащие в основе этого изменения, будут подробно изложены ниже.
Хранение информации о текущем каталоге, чтобы демон мог перезапустив сам себя в той же среде, в которой он был перед этим запущен.
Добавление подпрограммы kill_children () для завершения всех активных соединений.
Добавление подпрограммы do__relaunch () для перезапуска сервера и получения сигнала HUP.
Самым новаторским дополнением к модулю Daemon.pm является код блокировки и восстановления сигналов в подпрограмме launch_child {). В предыдущих версиях этого сервера нас не беспокоил тот факт, что дочерний процесс наследует обработчики сигналов от родительского, поскольку единственным установленным обработчиком сигнала был безопасный обработчик CHLD. Однако в текущем воплощении сервера вновь созданные дочерние процессы наследуют также обработчик HUP родительского процесса, который, безусловно, не должен вызываться дочерними процессами, поскольку это приведет к многочисленным безуспешным попыткам каждого дочернего процесса перезапустить сервер.
Для этого следует выполнить функцию fork (), а затем немедленно переустановить обработчик HUP дочернего процесса в значение “DEFAULT”, чтобы восстановить правило поведения, предусмотренное в нем по умолчанию.