fork() в perl

[Удален]
1185

Hi!

Уважаемые web кодеры подскажите нормальный мануал по использованию функции fork() в perl...

Если можно то пару своих примеров.

пасиба ;)

Хелпзонович
На сайте с 15.06.2005
Offline
133
#1

В принципе, сам не использую.

Но вот Вам пример, достаточно наглядный (как по мне).

#!/usr/bin/perl
use strict;
use POSIX ":sys_wait_h";

my $PidFile = "/var/run/<твой пид>.pid"; # PID-файл (идентификатор процесса)
my $RefreshInterval = 10;

Daemonize();

sub Process {
#Комманды демонизированного процесса
}

sub Daemonize {
# При живом демоне не запускаемся
if (TestMinion()){
print "xxx is already running\n\n";
exit(1);
}
my $NPId = fork(); # ! ВЕТВИМСЯ !
if ($NPId){ # Родитель
print "My pid is: ", $$, "\n";
print "Daemon pid is: ", $NPId, "\n";
open(FH, "+>" . $PidFile); # PID процесса - потомка
print FH $NPId;
close(FH);
exit(0); # Выходим
} else { # Демон
POSIX::setsid(); # Отваливаем

# Обработчики сигналов
$SIG{'INT'} = "IGNORE";
$SIG{'HUP'} = "IGNORE";
$SIG{'TERM'} = \&SigTERM;
$SIG{'CHLD'} = "IGNORE";

for (;;){
Process();
sleep($RefreshInterval); # Спим
}
}
}

sub SigTERM {
unlink($PidFile);
exit(0);
}

#
# Проверка наличия процесса в памяти
#
sub TestMinion{
my $NStatus = 0;
if (-f $PidFile){ # Если есть такой pid файл
open(FH, "<" . $PidFile); # Читаем pid
my $NRootPId = <FH>;
close(FH);
if ($NRootPId) { # Если есть pid
if (kill(0, $NRootPId)) { $NStatus = 1; # Если процесс жив
} else { unlink($PidFile); } # иначе - стираем файл
}
}
return $NStatus
}

Правка. в коде - рожица это точка с запятой и скобка.

Вы там держитесь! Хорошего вам настроения. Здоровья.
[Удален]
#2

большое спасибо

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий