I\'ve got a Perl script I\'m using for running a file processing tool which is started using backticks. The problem is that occasionally the tool hangs and It needs to be killed
You need to set $SIG{'ALRM'} to a handler routine and then call the alarm function with the timeout value. Something like:
$SIG{'ALRM'} = handler;
foreach $file (@FILES) {
alarm(10);
$runResult = `mytool $file >> $file.log`;
alarm(0);
}
sub handler {
print "There was a timeout\n";
}
This should trigger the handler subroutine after 10 seconds. Setting alarm to 0 turns off the alarm.
I would probably not use `` for this. Instead I would open()
the command with |
so that it runs asynchronously. This will return the pid
. Then you can do a nonblocking wait()
in a loop with sleep that after a certain number of tries without success, issues a signal to the child pid
.