我正在使用PSEXEC在perl中使用system($CMD)运行远程进程。

我有一台运行系统cmd的计算机(让我们将其称为#1),另一台计算机(让我们将其称为#2)则“从”计算机1接收命令。

有时第二台计算机(#2)中的进程卡住了。

如何在计算机#1中为系统cmd设置超时,该超时将在几分钟后强制终止cmd?

感谢您的回答,但是:
我想做些非常简单的事情,我有2个perl文件。
文件#1,秒数为1到10。(+打印到屏幕)
file#2-超时文件,该文件应在5秒钟后终止文件#1(系统命令)。

结果...:
发生超时,但进程#1仍在运行...

文件#2

$timeout=5;
eval {
    local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
    alarm $timeout;
    $nread = system('F:\perl1.pl');
    alarm 0;
};
if ($@) {
    die unless $@ eq "alarm\n";   # propagate unexpected errors
    print "process terminated\n";}
else {
    # didn't
}

文件#1
$i=0;
while($

    i<10){
    sleep(1);
    $i++;

print "$i\n";
}

CMD窗口结果:
C:\>F:\perl2.pl
1
2
3
4
process terminated

C:\>5
6
7
8
9
10

最佳答案

IPC::Run为您处理。

use IPC::Run qw( run timeout );

run \@cmd, timeout( 120 )
   or die "cat: $?";

关于perl - 在Perl中使用系统命令时超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16918005/

10-12 21:07
查看更多