应用程序进程永远不会在每次运行时终止

时间:2010-04-03 14:20:40

标签: windows perl

我看到即使在使用下面的Perl脚本关闭应用程序后,应用程序仍然保持活动状态。此外,对于后续运行,它总是说“进程无法访问该文件,因为它正由另一个进程使用.iperf.exe -u -s -p 5001成功。输出为:”

所以每次我必须更改脚本中使用的文件名$ file或者我必须在任务管理器中杀死iperf.exe进程。

有人可以让我知道摆脱它的方法吗?

以下是我正在使用的代码......

my @command_output;
eval { 
    my $file = "abc6.txt";    
    $command = "iperf.exe -u -s -p 5001";
    alarm 10;
    system("$command > $file");
    alarm 0;
close $file;
};
if ($@) {
    warn "$command timed out.\n";
} else {
   print "$command successful. Output was:\n", $file;
}
unlink $file;

1 个答案:

答案 0 :(得分:0)

由于您的进程未打开$ file,因此close $文件无效。

如果过程及时完成,则不会出现问题。因此,您需要了解为什么您认为iperf可以在10秒内完成其工作以及为什么它认为不能。

此外,如果发生超时,您可能应该终止子进程。在Unix上,您可以按顺序发送SIGTERM,SIGHUP和SIGKILL信号,并在其间进行短暂暂停(可能每个1秒)。前两个是礼貌的要求,以逃离道奇城;最后是最终的死亡威胁。当然,您必须知道发送信号的过程 - 使用'system'和Windows确定比在Unix上确定更难。