相关疑难解决方法(0)

在Perl中做超时的方法?

我经常使用以下模式设置Perl中特定代码片段的运行时间的上限:

my $TIMEOUT_IN_SECONDS = 5;
eval {
    local $SIG{ALRM} = sub { die "alarm\n" };
    alarm($TIMEOUT_IN_SECONDS);
    # do stuff that might timeout.
    alarm(0);
};
if ($@) {
    # handle timeout condition.
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • 这是正确的方法吗?
  • 是否有任何情况下运行时间可能超过$ TIMEOUT_IN_SECONDS,或上述方法是防弹?

perl timeout

20
推荐指数
2
解决办法
2万
查看次数

如何限制在Perl脚本的特定部分中花费的时间?

有没有办法建立一个时间计数器,使脚本的部分运行只要它滴答?例如,我有以下代码:

for my $i (0 .. $QUOTA-1) {
    build_dyna_file($i);
    comp_simu_exe;
    bin2txt2errormap($i);
}
Run Code Online (Sandbox Code Playgroud)

从理论上讲,我想运行这个循环3分钟,即使循环指令尚未完成,它仍应在3分钟后突破循环.

实际上程序会打开一个时间计数器窗口,它与脚本的一部分并行工作(每次调用它).

另外,子调用'comp_simu_exe'运行外部模拟器(在shell中),当超时结束时 - 此过程也必须被杀死(不要假设在一段时间后返回).

sub comp_simu_exe{

system("simulator --shell");
}
Run Code Online (Sandbox Code Playgroud)

系统函数调用之间是否有任何关联?

perl timeout

7
推荐指数
2
解决办法
4373
查看次数

如何超时可能挂起的分叉进程?

我正在编写一个Perl脚本,它将编写一些输入并将这些输入发送到外部程序.这个程序有一个很小但非零的机会,我想把它计时:

my $pid = fork;
if ($pid > 0){
    eval{
        local $SIG{ALRM} = sub { die "TIMEOUT!"};
        alarm $num_secs_to_timeout;
        waitpid($pid, 0);
        alarm 0;
    };
}
elsif ($pid == 0){
    exec('echo blahblah | program_of_interest');
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

现在,在$ num_secs_to_timeout之后,program_of_interest仍然存在.我试图在匿名子程序中杀死它,$SIG{ALRM}如下所示:

local $SIG{ALRM} = sub{kill 9, $pid; die "TIMEOUT!"}
Run Code Online (Sandbox Code Playgroud)

但这没有做任何事情.program_of_interest仍然存在.我如何杀死这个过程?

perl fork alarm

7
推荐指数
1
解决办法
1万
查看次数

Perl,在x秒后使脚本超时?

我一直在寻找这个,但很难得到一个直接的答案(因为PHP似乎有很多关于这个主题的信息)..我需要让我的perl脚本在指定的秒数后死亡,因为,就像现在一样,它们运行时间太长而且堵塞了我的系统,我怎么能这样做才能使整个脚本在指定的秒数后死掉?

我知道杀死脚本的外部解决方案,但我想在perl脚本本身内完成.

谢谢

perl timeout

4
推荐指数
1
解决办法
5846
查看次数

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

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

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

目前我正在使用:

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

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

perl multithreading

3
推荐指数
1
解决办法
3036
查看次数

标签 统计

perl ×5

timeout ×3

alarm ×1

fork ×1

multithreading ×1