Linux 不可预测报警忽略信号
在执行下面的foreach循环时,我不断收到一个“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
报警\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”
。根据该字符串,它可能是响应报警
信号而抛出的。这绝对不是你发布的代码抛出的。