在perl中调节函数的执行时间

在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

我有一个命令行函数,我想用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 = 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”对。

检查此项:检查此项:注意:每个进程一次只能运行一个本机
报警
,所以像递归这样的事情是行不通的。注意:每个进程一次只能运行一个本机的
报警
,所以像递归这样的事情是行不通的。