加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何指定Perl系统调用的超时限制?

发布时间:2020-12-15 21:21:27 所属栏目:大数据 来源:网络整理
导读:有时我的系统调用进入永无止境的状态。为了避免这种情况,我希望能够在指定的时间内打破呼叫。 有没有办法指定超时限制为 system ? system("command","arg1","arg2","arg3"); 我希望从Perl代码中实现超时可移植性,而不是使用一些操作系统特定的功能,如uli
有时我的系统调用进入永无止境的状态。为了避免这种情况,我希望能够在指定的时间内打破呼叫。

有没有办法指定超时限制为system

system("command","arg1","arg2","arg3");

我希望从Perl代码中实现超时可移植性,而不是使用一些操作系统特定的功能,如ulimit。

解决方法

请参阅 alarm功能。来自pod的示例:
eval {
    local $SIG{ALRM} = sub { die "alarmn" }; # NB: n required
    alarm $timeout;
    $nread = sysread SOCKET,$buffer,$size;
    alarm 0;
};
if ($@) {
    die unless $@ eq "alarmn";   # propagate unexpected errors
    # timed out
}
else {
    # didn't
}

在CPAN上有一些模块可以更好地包装,例如:Time::Out

use Time::Out qw(timeout) ;

timeout $nb_secs => sub {
  # your code goes were and will be interrupted if it runs
  # for more than $nb_secs seconds.
};

if ($@){
  # operation timed-out
}

/ I3az /

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读