#!/usr/bin/perl use strict; use warnings; sub helper { # forked process, wastes 10 seconds for (1..10) { print "helper: start of second $_\n"; select(undef,undef,undef,1); # poor man's sleep, without messing with alarm print "helper: end of second $_\n"; } } sub main { # main process print "Helper will die in 5 seconds\n"; alarm(5); # kill me in five seconds ... exec($^X,$0,"dummy argument") # start perl with this script and a parameter or die "Could not start helper: $!"; } if (@ARGV) { helper(); } else { main(); } #### >perl alarmtest.pl Helper will die in 5 seconds helper: start of second 1 helper: end of second 1 helper: start of second 2 helper: end of second 2 helper: start of second 3 helper: end of second 3 helper: start of second 4 helper: end of second 4 helper: start of second 5 Alarm clock > #### sub helper { $SIG{'ALRM'}=sub { print "I am immortal, you fool!\n" }; # forked process, wastes 10 seconds for (1..10) { print "helper: start of second $_\n"; select(undef,undef,undef,1); # poor man's sleep, without messing with alarm print "helper: end of second $_\n"; } } #### >perl alarmtest.pl Helper will die in 5 seconds helper: start of second 1 helper: end of second 1 helper: start of second 2 helper: end of second 2 helper: start of second 3 helper: end of second 3 helper: start of second 4 helper: end of second 4 helper: start of second 5 I am immortal, you fool! helper: end of second 5 helper: start of second 6 helper: end of second 6 helper: start of second 7 helper: end of second 7 helper: start of second 8 helper: end of second 8 helper: start of second 9 helper: end of second 9 helper: start of second 10 helper: end of second 10 >