Этот специальный сигнал фактически не передает никаких сигналов процессу, а возвращает истинное значение, если указанный процесс (или группа процессов) может принимать сигналы. Если функция kill() возвращает истинное значение, это свидетельствует о том, что процесс все еще работает, и поэтому выполняется выход с сообщением об ошибке.
В ином случае, ссылаясь на документацию и материалы сайта , если функция kill () возвращает ложное значение, это значит, что предыдущий серверный процесс завершился некорректно, без уничтожения своего файла PID, или работает под другим идентификатором пользователя и текущий процесс не имеет достаточных привилегий для отправки ему сигнала. Мы не принимаем во внимание последний случай, поскольку предполагается, что запуск сервера всегда происходит от имени одного и того же пользователя. Если это предположение является ложным, то попытка уничтожить старый файл PID на следующем этапе завершится аварийно и не произойдет опасного развития событий.
Строки 7-9. Уничтожение старого файла PID. В стандартный вывод сообщений об ошибках записывается предупреждение и предпринимается попытка уничтожить старый файл PID после предварительной проверки с помощью оператора файловой проверки -w того, что он предназначен для записи. Если проверка -w или вызов функции unlink () оканчивается неудачей, происходит аварийное завершение сценария.
Строки 10-12. Создание нового файла PID. Последние два этапа состоят в создании нового файла PID и открытии его для записи. Вызывается метод IO::File->new() с таким сочетанием флажков, которое позволяет создать файл и открыть его, но только если он еще не существует. Это исключает возможность случайно затереть файл в том случае, если запуск сервера был выполнен два раза подряд с небольшим промежутком времени, оба экземпляра проверили наличие файла PID и обнаружили, что он отсутствует, и почти одновременно пытаются создать новый файл PID. В случае успешного выполнения открытый дескриптор файла возвращается вызывающему оператору.