my $status = 0; my $maxTime = shift @ARGV; my $runCmd = join ' ', @ARGV; $SIG{ALRM} = sub { die "timeout" }; eval { alarm($maxTime); `$runCmd`; alarm(0); }; if ($@) { if ($@ =~ /timeout/) { local $SIG{'HUP'} = 'IGNORE'; kill('HUP', -$$); $status = 1; } } exit $status;