我正在使用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/