[…. 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 …]