$SIG{HUP} = \&reload; $SIG{TERM} = \&terminate; sub reload { # do whatever needs doing to restart } sub terminate { # terminate database connection, etc... } #### use POSIX qw(:signal_h); # do something # my $sigSet = POSIX::SigSet->new; my $blockSet = POSIX::SigSet->new(SIGTERM, SIGHUP); die "Error restoring signal set: $!" unless sigprocmask(SIG_BLOCK, $blockSet, $sigSet) # do critical (uninterruptable) stuff die "Error restoring original signal set: $!" unless sigprocmask(SIG_SETMASK, $sigSet) # # do other stuff here