#!/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 …]