在 Solaris 9 (Sparc) 的 chroot 环境中运行 Perl 时,我遇到了一些奇怪的错误。我们使用的是定制的 Perl,但它几乎完全是 Perl 5.8.7,而且这个版本已经在包括 Solaris 8-10 在内的各种平台上运行了多年。
以下代码非常简单:
#!/usr/bin/perl
use strict;
use warnings;
print "About to sleep(1)\n";
sleep 1;
print "Just woke up!\n";
但是,如果我运行它,“刚醒来!” 永远不会被打印 - 相反,程序结束并且“闹钟”回显到屏幕上。只有在睡眠时才会发生这种情况——如果我编写了一个执行大量数学运算并需要 10 秒运行的程序,那么一切正常。它也只发生在 chroot 环境中。
我已经转储了 %SIG,它有一个 'ALRM => undef' 的条目,这是预期的 - 非 chroot 环境具有相同的行为。但是,如果我将脚本更改为包括:
$SIG{ALRM} = sub {};
...一切正常。那么,有什么关系呢?我对 Solaris 没有太多经验,但是必须有一种方法可以使默认信号处理程序正常运行。