我看到即使在使用下面的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;
答案 0 :(得分:0)
由于您的进程未打开$ file,因此close $文件无效。
如果过程及时完成,则不会出现问题。因此,您需要了解为什么您认为iperf可以在10秒内完成其工作以及为什么它认为不能。
此外,如果发生超时,您可能应该终止子进程。在Unix上,您可以按顺序发送SIGTERM,SIGHUP和SIGKILL信号,并在其间进行短暂暂停(可能每个1秒)。前两个是礼貌的要求,以逃离道奇城;最后是最终的死亡威胁。当然,您必须知道发送信号的过程 - 使用'system'和Windows确定比在Unix上确定更难。