Any-Daemon
view release on metacpan or search on metacpan
lib/Any/Daemon.pm view on Meta::CPAN
my $kill_childs = $self->_mkcall($args{kill_childs} || 'killChilds');
my $child_died = $self->_mkcall($args{child_died} || 'childDied');
my $max_childs = $args{max_childs} || 10;
my $run_child = sub
{ # re-seed the random number sequence per process
srand(time+$$);
# unhandled errors are to be treated seriously.
my $rc = try { $child_task->(@_) };
if(my $e = $@->wasFatal) { $e->throw(reason => 'ALERT'); $rc = 1 }
$rc;
};
$SIG{CHLD} = sub { $child_died->($max_childs, $run_child) };
$SIG{HUP} = sub
{ notice "daemon received signal HUP";
$reconfig->(keys %childs);
$child_died->($max_childs, $run_child);
};
lib/Any/Daemon.pm view on Meta::CPAN
# child manager will never die
sleep 60 while 1;
}
sub _run_without_childs($%) {
my ($self, $run_task, %args) = @_;
my $reconfig = $self->_mkcall($args{reconfig} || 'reconfigDaemon');
# unhandled errors are to be treated seriously.
my $rc = try { $run_task->(@_) };
if(my $e = $@->wasFatal) { $e->throw(reason => 'ALERT'); $rc = 1 }
$SIG{HUP} = sub
{ notice "daemon received signal HUP";
$reconfig->(keys %childs);
};
$SIG{TERM} = $SIG{INT} = sub
{ my $signal = shift;
notice "daemon terminated by signal $signal";
( run in 0.429 second using v1.01-cache-2.11-cpan-496ff517765 )