How can I kill a Perl system call after a timeout?

后端 未结 2 1396
失恋的感觉
失恋的感觉 2021-01-21 08:15

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

2条回答
  •  情话喂你
    2021-01-21 08:44

    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.

提交回复
热议问题