是否可以使用 Parallel::ForkManager 为 fork 实现某种超时(时间限制)?
基本 Parallel::ForkManager 脚本如下所示
use Parallel::ForkManager;
my $pm = Parallel::ForkManager->new( 10 );
for ( 1 .. 1000 ) {
$pm->start and next;
# some job for fork
$pm->finish;
}
$pm->wait_all_children();
我想限制“# some job for fork”的时间。例如,如果它没有在 90 秒内完成。那么它(叉子)应该被杀死/终止。我考虑过使用它,但我不得不说,我不知道如何将它与 Parallel::ForkManager 一起使用。
编辑
感谢 hobbs 和 ikegami。您的两个建议都有效......但仅在这个基本示例中,而不是在我的实际脚本中:(。 这些叉子将永远存在并且 - 老实说 - 我不知道为什么。我使用这个脚本几个月。没有改变任何东西(尽管很多事情取决于外部变量)。每个分叉都必须从网站下载页面,解析它并将结果保存到文件中。每个分叉不应超过 30 秒。超时设置为 180 秒. 那些悬挂的叉子是完全随机的,所以很难追踪问题。这就是为什么我想出了一个临时的、简单的解决方案——超时和终止。
什么可能会在我的代码中禁用(中断)您的超时方法?我的代码中没有其他alarm()
任何地方。
编辑 2
其中一个叉子挂了 1 小时 38 分钟并返回“超时 PID”——这是我输入die()
的alarm()
。所以超时工作......但它迟到了大约 1h36,5m ;)。你有什么想法?