Linux 不可预测报警忽略信号

Linux 不可预测报警忽略信号,linux,perl,signals,centos,Linux,Perl,Signals,Centos,在执行下面的foreach循环时,我不断收到一个“报警\uuu忽略””信号。奇怪的是,错误出现在循环的不同迭代中(例如,有时是第三次,有时是第26次,等等),我无法确定它何时发生的押韵或原因。当我注释掉“my@cols=split(/\s+/,$line),”时,该脚本运行时没有错误,但我无法理解为什么拆分会导致信号 代码如下: my @forest = (); foreach (@treeBlobs) { my @treeBlob = @{$_}; my $thisTre

在执行下面的foreach循环时,我不断收到一个“
报警\uuu忽略”
”信号。奇怪的是,错误出现在循环的不同迭代中(例如,有时是第三次,有时是第26次,等等),我无法确定它何时发生的押韵或原因。当我注释掉“
my@cols=split(/\s+/,$line)
,”时,该脚本运行时没有错误,但我无法理解为什么拆分会导致信号

代码如下:

my @forest = ();

foreach (@treeBlobs) {

    my @treeBlob = @{$_};

    my $thisTree = eval {

        my %tree = ();

        foreach my $line (@treeBlob) {
            my @cols = split(/\s+/, $line);
            $tree{id++} = {map{$CLASSIFIER_COLUMNS[$_] => $cols[$_]}(0..scalar @cols-1)};
        }

        return \%tree;

    };

    print "ERROR: $@\n" if $@; 
    push @forest, $thisTree;
    my $sc = scalar @forest;
    print "FOREST: $sc; $thisTree\n";
}
下面是一些示例输出:

...
FOREST: 19; HASH(0x4668c90)
FOREST: 20; HASH(0x4664e10)
FOREST: 21; HASH(0x4658e30)
FOREST: 22; HASH(0x465ca80)
FOREST: 23; HASH(0x4664860)
FOREST: 24; HASH(0x4664240)
FOREST: 25; HASH(0x46740b0)
FOREST: 26; HASH(0x4667a70)
FOREST: 27; HASH(0x465cf50)
FOREST: 28; HASH(0x465cfd0)
ERROR: __alarm__ignore__(54)

FOREST: 29;
FOREST: 30; HASH(0x465ada0)
同样,错误并不总是(甚至通常)发生在循环的第29次迭代中——它可以发生在任何迭代中

想法


谢谢

您没有显示引发异常的内容。听起来您正在使用
报警
结合
$SIG{ALRM}
处理程序将信号转换为异常。

当前此代码没有用处。为正在运行的Perl发行版/版本和CentOS提供
@treeBlobs
@CLASSIFIER\u列的输入数据。哈希键
id++
也有语法错误。该异常由引发。您的代码中有什么东西使用它吗?my@CLASSIFIER\u COLUMNS=qw(节点\u id left\u children right\u children split\u var split\u point status prediction)@treeBlobs是从文件中读取的,我无法共享该数据。id++也不重要,因为那一行被注释掉了。我不会抛出异常。实际上,我并没有使用alarm方法或$SIG{ALRM}(或使用Mail::SpamAssassin::Timeout)执行任何操作。大多数情况下,警报忽略被eval捕获,但有时没有,脚本被终止。我发现这种缺乏一致性的情况也很令人困惑。你,你的程序,你使用的模块,随便什么。有东西抛出异常
“\uuuuu报警\uuuu忽略\uuuu\n”
。根据该字符串,它可能是响应
报警
信号而抛出的。这绝对不是你发布的代码抛出的。