Задача удаления файла PID выполняется в блоке END {} модуля Daemon. В процессе выполнения этой программы в системном журнале появляются следующие записи.
Jun 2 23:12:36 pesto_eliza_log.pl [14893]: Server accepting connections on port 12005 Jun 2 23:12:42 pesto eliza_log.pi[14897]: Accepting a connection from 127.0.0.1 Jun 2 23:12: 48 pesto eliza_log.pi [ 14897] : Connection from 127.0.0.1 finished Jun 2 23:12:49 pesto eliza_log.pl [14899]: Accepting a connection from 192.168.3.5 Jun 2 23:13:02 pesto eliza_log.pl[14901]: Accepting a connection from 127.0.0.1 Jun 2 23:13:19 pesto eliza_log.pl[14899]: Connection from 192.168.3.5 finished Jun 2 23:13:26 pesto eliza_log.pl[14801]: Connection from 127.0.0.1 finished Jun 2 23:13:39 pesto eliza_log.pl[14893]: Server exiting normally
Обратите внимание, что записи с указаниями о запуске и останове сервера фиксируются с идентификатором PID родительского процесса, а сообщения об отдельных подключениях — с идентификаторами PID различных дочерних процессов. Например, запрос страницы, представляющей стальные радиаторы корадо будет сопровождаться сообщениями с PID дочернего процесса.
Регистрация сообщений, вырабатываемых функциями warn() и die()
Хотя в программе и реализован способ явной регистрации сообщения об ошибках в системном журнале, пока приходится мириться с тем, что сообщения об ошибках вырабатываемые функциями warn () и die (), бесследно пропадают. К счастью в языке Perl предусмотрен механизм перекрытия функций warn () и die () фуккциями, определяемыми пользователем. Это позволяет обеспечить вызов функций warn () подпрограммой log_warn (), а функцией die () — подпрограммы log_die (). Для доступа к обработчикам warn () и die () служат два специальных ключа в хеше %SIG. Если в качестве значений элементов $SIG{_WARN_} и/или $SIG{_DIE_} этого хеша будут установлены ссылки на код, то при каждом вызове функций warn () или die (), вместо предусмотренных по умолчанию процедур, будет вызываться код. Для внесения такой поправки достаточно ввести небольшое дополнение в подпрограмму init_log () модуля Daemon.
$SIG{_WARN_) = &log_warn;
$SIG{_DIE_} = &log_die;
После внесения этого изменения можно больше не задумываться о том, что для записи сообщений в журнал нужно вызывать подпрограмму log_notice () и log_die (). Вместо этого, можно использовать знакомую функцию warn () для отправки в системный журнал обычных предупреждающих сообщений или die () регистрации сообщения об аварийной ситуации и завершения программы.