在perl中调节函数的执行时间
我有一个命令行函数,我想用Perl执行。但是,我只希望它最多运行X秒。如果在X秒时没有返回结果,我想继续。比如说,如果我想做在perl中调节函数的执行时间,perl,Perl,我有一个命令行函数,我想用Perl执行。但是,我只希望它最多运行X秒。如果在X秒时没有返回结果,我想继续。比如说,如果我想做 sub timedFunction { my $result = `df -h`; return $result; } 如果命令行命令在3秒后未返回任何值,我如何停止等待命令行命令完成?您想使用报警 local $SIG{ALRM} = sub { die "Alarm caught. Do stuff\n" }; #set timeout my $timeout
sub timedFunction {
my $result = `df -h`;
return $result;
}
如果命令行命令在3秒后未返回任何值,我如何停止等待命令行命令完成?您想使用报警
local $SIG{ALRM} = sub { die "Alarm caught. Do stuff\n" };
#set timeout
my $timeout = 5;
alarm($timeout);
# some command that might take time to finish,
system("sleep", "6");
# You may or may not want to turn the alarm off
# I'm canceling the alarm here
alarm(0);
print "See ya\n";
当警报信号被捕捉时,你显然不必在这里“死亡”。说获取你调用的命令的pid并杀死它
以下是上述示例的输出:
$ perl test.pl
Alarm caught. Do stuff
$
请注意,在系统调用之后,print语句没有执行
值得注意的是,不建议使用alarm来超时系统调用,除非根据需要使用alarm的是“eval/die”对
local $SIG{ALRM} = sub { die "Alarm caught. Do stuff\n" };
#set timeout
my $timeout = 5;
alarm($timeout);
# some command that might take time to finish,
system("sleep", "6");
# You may or may not want to turn the alarm off
# I'm canceling the alarm here
alarm(0);
print "See ya\n";
当警报信号被捕捉时,你显然不必在这里“死亡”。说获取你调用的命令的pid并杀死它
以下是上述示例的输出:
$ perl test.pl
Alarm caught. Do stuff
$
请注意,在系统调用之后,print语句没有执行
值得注意的是,不建议使用alarm来超时系统调用,除非它是符合以下条件的“eval/die”对。检查此项:检查此项:注意:每个进程一次只能运行一个本机
报警
,所以像递归这样的事情是行不通的。注意:每个进程一次只能运行一个本机的报警
,所以像递归这样的事情是行不通的。