#!/usr/bin/perl
use strict;
use My_Functions;
&print_myheader();
my $br=(-t)?"\n":'
';
use POSIX qw(:signal_h);
my $sigset_new = POSIX::SigSet->new();
my $sigset_old = POSIX::SigSet->new();
sigprocmask(SIG_BLOCK, $sigset_new, $sigset_old);
if ($sigset_old->ismember(SIGALRM)) {
print "SIGALRM is being blocked!$br";
$sigset_new->addset(SIGALRM);
sigprocmask(SIG_UNBLOCK, $sigset_new);
} else {
print "SIGALRM NOT being blocked$br";
}
$SIG{ALRM} = sub {print scalar(localtime()), " ALARM, leaving$br"; sigprocmask(SIG_BLOCK, $sigset_new, $sigset_old); exit; };
alarm(5);
print scalar(localtime()), " Starting sleep...$br";
sleep (10);
print scalar(localtime()), " Exiting normally...$br";
####
[…. code …]
my $sigset_new = POSIX::SigSet->new();
my $sigset_old = POSIX::SigSet->new();
sigprocmask(SIG_BLOCK, $sigset_new, $sigset_old);
if ($sigset_old->ismember(SIGALRM))
{
$sigset_new->addset(SIGALRM);
sigprocmask(SIG_UNBLOCK, $sigset_new);
}
else
{
# do nothing
}
eval {
$SIG{ALRM}=sub{
sigprocmask(SIG_BLOCK, $sigset_new, $sigset_old);
exit;
};
alarm ($timer);
for (@mylist)
{
my $cmd= "perl process_$_.pl args"; # tried with trailing & too
system($cmd);
}
alarm (0);
};
[ … more code …]