如何指定Perl系统调用的超时限制?
发布时间:2020-12-15 21:21:27 所属栏目:大数据 来源:网络整理
导读:有时我的系统调用进入永无止境的状态。为了避免这种情况,我希望能够在指定的时间内打破呼叫。 有没有办法指定超时限制为 system ? system("command","arg1","arg2","arg3"); 我希望从Perl代码中实现超时可移植性,而不是使用一些操作系统特定的功能,如uli
有时我的系统调用进入永无止境的状态。为了避免这种情况,我希望能够在指定的时间内打破呼叫。
有没有办法指定超时限制为 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上有一些模块可以更好地包装,例如: 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 / (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |