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