Windows Perl脚本无缘无故挂起

Windows Perl脚本无缘无故挂起,windows,perl,Windows,Perl,所以我有一个小脚本,它检查两个日志文件中的特定行,并比较这些行。 该脚本用于几个不同的Windows代理。但在一个上面,它只是挂起,不退出。由于脚本在竹子中使用,因此当脚本不退出时,整个作业将挂起。 当我通过远程访问检查计算机并终止脚本时,作业将继续,直到它再次到达脚本 这是由另一个脚本启动的脚本 #! /usr/bin/perl my $naluresult = 2; my $hevcresult = 2; my $hevcfailed = 0; use strict; use warnin

所以我有一个小脚本,它检查两个日志文件中的特定行,并比较这些行。 该脚本用于几个不同的Windows代理。但在一个上面,它只是挂起,不退出。由于脚本在竹子中使用,因此当脚本不退出时,整个作业将挂起。 当我通过远程访问检查计算机并终止脚本时,作业将继续,直到它再次到达脚本

这是由另一个脚本启动的脚本

#! /usr/bin/perl
my $naluresult = 2;
my $hevcresult = 2;
my $hevcfailed = 0;

use strict;
use warnings;

#---------------------------------------------
#check for $ARGV[0] and $ARGV[1]

open( my $nalulog, "<", $ARGV[1] )
    or die "cannot open File:$!\n\n";
while (<$nalulog>) {
    chomp;
    $_ =~ s/\s+//g;
    if ( $_ =~ m/MD5:OK/ ) {
        $naluresult = 1;
    } else {
        if ( $_ =~ m/MD5:MISSING/ ) {
            $naluresult = 0;
        }
    }
}
close $nalulog;

#---------------------------------------------

open( my $hevclog, "<", $ARGV[0] )
    or die "cannot open File:$!\n\n";

while (<$hevclog>) {
    chomp;
    $_ =~ s/\s+//g;
    if ( $_ =~ m/MD5check:OK/ ) {
        $hevcresult = 1;
        last;
    } else {
        if ( $_ =~ m/MD5check:FAILED/ ) { $hevcfailed = 1; }
    }
    if ( $hevcfailed == 1 ) {
        #do stuff
    }
}
close $hevclog;

#---------------------------------------------

if ( $hevcresult == 2 ) {
    print("Missing MD5 status in HEVC Output");
    exit(-1);
} elsif ( $naluresult == 2 ) {
    print("Missing MD5 status in NALU Output");
    exit(-2);
} else {
    if ( $naluresult == $hevcresult ) { exit(0); }
    else {
        #different if-statements to print() to log
        exit(1);
    }
}

#---------------------EOF---------------------
#/usr/bin/perl
我的$naluresult=2;
我的$hevcresult=2;
我的$hevcfailed=0;
严格使用;
使用警告;
#---------------------------------------------
#检查$ARGV[0]和$ARGV[1]

打开(my$nalulog,“如果您的文件只是普通磁盘文件,没有被其他进程同时写入,或被锁定,或诸如此类,那么您这里的代码中没有任何内容应该挂起。如果文件大小都合理,那么您这里的代码应该通读文件并完成


但是,如果其中一个文件被锁定,或者非常大,或者如果您有其他代码可能陷入无限循环,这就可以解释为什么您的程序挂起。

您无法确定它是否挂起,可能它正在读取非常大的文件?
$|=1;
在顶部,并且
打印”。"除非$.%1000;
在每个
中,而
我不能确定,这是对的。但是文件没有那么大。在300到2000行之间。这些应该在1100分钟内解析。另外,仔细分析
#do stuff
部分。文件上的强制文件锁定?我同意mpapec,插入一些进度消息找出它挂起的位置。它必须是一个文件I/O操作(最有可能是打开或写入)。do stuff部分只需再检查4行并将$hevcresult设置为特定的数字。其中三个if语句:if($=~m/Stringtolookfor/{$hevcresult=-1;}