Подпрограмма become_daemon () имеет ряд вариантов. В определенной литературе рекомендуется выполнять ветвление не один раз, а дважды; в этом документе предупреждается, что в ином случае первый дочерний процесс может снова открыть управляющий терминал, если в нем будет преднамеренно вновь открыто устройство /dev/tty. Однако это маловероятно, поэтому вариант сценария с двойным ветвлением применяется далеко не на всех промышленных серверах.
Вместо переоткрытия стандартных дескрипторов файлов в устройство /dev/null их можно просто закрыть.
close $_ foreach (*STDIN,*STDOUT,*STDERR);
Однако при таком построении сценария может быть нарушена работа подпроцессов, которые рассчитывают на наличие открытых стандартных дескрипторов файлов, поэтому лучше его не применять. Например, при получении страницы про заправку картриджей www.zapravka005.ru необходимо чтобы выходной дескриптор был открытым.
И наконец, в некоторых более старых системах UNIX, таких как ULTRIX, рабочая версия функции setsid() отсутствует. В подобных системах вызов функции setsid() приводит к возникновению ошибки времени выполнения. В таких системах можно использовать модуль Proc::Daemon из архива CPAN, который содержит другие подходящие средства.
Файлы PID.
Теперь для нашего психотерапевтического сервера может быть предусмотрено еще одно средство — файл PID. В соответствии с общепринятым соглашением серверы и другие системные демоны записывают свои идентификаторы процессов в файлы с именами наподобие /var/run/servername.pid. Перед завершением работы сервер удаляет этот файл. Это позволяет системному администратору и другим пользователям посылать сигналы демону, используя следующее сокращение: