use Time::HiRes qw( sleep ); # Optional. print("Process Id = $$\n"); print("Start time = " . localtime() . "\n"); my $term_sig; local $SIG{TERM} = sub { $SIG{TERM} = "IGNORE"; $term_sig = 1; }; # Sleep for 20 seconds. Ignore interruptions. my $sleep_til = time() + 20; for (;;) { my $sleep_len = $sleep_til - time(); last if $sleep_len <= 0; sleep($sleep_len); } print("End time = " . localtime() . "\n"); if ($term_sig) { print "Received TERM signal\n" } else { print "Did not receive TERM signal\n" }