#!/usr/bin/perl -w
use strict;
use Time::HiRes qw( gettimeofday tv_interval );
print "$]\n";
my $elapsed = 0;
my $start_time = [gettimeofday];
eval {
local $SIG{ALRM} = sub {
$elapsed = tv_interval( $start_time );
warn "alarm-timeout signal";
die;
};
alarm(1);
`ls -R / 2>/dev/null`;
alarm(0);
};
print "$@" if $@;
print "$elapsed\n";
####
5.006
alarm-timeout signal at /home/jbho/bin/test_SIGALRM.pl line 15.
Died at /home/jbho/bin/test_SIGALRM.pl line 16.
0.999504
####
5.008
alarm-timeout signal at /home/jbho/bin/test_SIGALRM.pl line 15.
Died at /home/jbho/bin/test_SIGALRM.pl line 16.
109.948451
####
use POSIX ':signal_h';
my $alarm = 0;
sigaction SIGALRM, new POSIX::SigAction sub { $alarm = 1 }
or die "Error setting SIGALRM handler: $!\n";