Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (32 – TCP клиент/сервер, часть 25)

предыдущая часть ««»» следующая часть

В хорошей программе демона можно предусмотреть проверку наличия этого файла во время запуска и отказ от работы, если он уже существует, поскольку наличие этого файла может указывать на то, что уже запущен другой экземпляр сервера. Еще более развитые программы демонов проверяют, действительно ли работает процесс на который указывает этот файл PID. Возможно, что предыдущий сеанс работы сервера завершился аварией или был уничтожен, поэтому серверная программа не имела возможности удалить этот файл. Такое решение реализовано в подпрограмм openjpid_file (), приведенной ниже.

Подпрограмма openjpid_fiie ()

sub    open_pid_file {
my    $ file = shift;
if    (-e $file) {    #    Ошибка.    Файл    pid    уже    существует
my    $fh = IO::File->new ($file) | | return;
my    $pid = <$fh>;
die "Server .already running    with Pid $pid"
if kill 0 => $pid;
warn "Removing PID file for    defunct server process $pid.n";
die "Can’t unlink PID file $file"
unless -w $file && unlink $file;
}
return    IO::File->new($file, O_WR0NLY | O_CREAT | O_EXCL, 0644)
    or    die. "Can't create $file: $!n";
 }

Проведем анализ программы.

Строки 1-3. Проверка того, существует ли старый файл PID. Подпрограмма open_pid_file () вызывается с параметром, который указывает путь к файлу PID. Первое действие состоит в применении опции файловой проверки -е к этому файлу для определения того, существует ли он.

Строки 4-6. Проверка того, является ли старый файл PID действительным. Если файл PID существует, можно перейти к проверке того, работает ли еще процесс, на кото­рый он указывает. Для открытия старого файла PID и чтения из него числового иденти­фикатора процесса применяется модуль IO::File. Для определения того, работает ли еще этот процесс, используется функция kill (), которая отправляет процессу сигнал с номером 0.

2014-06-03 14:16:54

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2024 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония