如何在超时后终止Perl系统调用?

Fer*_*gal 3 perl multithreading

我有一个Perl脚本,我用它来运行一个使用反引号启动的文件处理工具.问题是,工具偶尔挂起并且需要将其杀死才能处理其余文件.

什么是应用超时的最佳方法,在此之后父脚本将终止挂起的进程?

目前我正在使用:

foreach $file (@FILES) {
    $runResult = `mytool $file >> $file.log`;
}
Run Code Online (Sandbox Code Playgroud)

但是当mytool在n秒后挂起时,我希望能够杀死它并继续下一个文件.

fra*_*nkc 6

我可能不会用``为此.相反,我会open()使用命令,|以便它以异步方式运行.这将返回pid.然后你可以wait()在一个有睡眠的循环中进行非阻塞,在经过一定次数的尝试后没有成功,向孩子发出信号pid.