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 環境でのみ発生します。
「ALRM => undef」のエントリを持つ %SIG をダンプしましたが、これは予期されることです。chroot されていない環境でも同じ動作をします。ただし、スクリプトを変更して次を含めると:
$SIG{ALRM} = sub {};
...すべて正常に動作します。それで、取引は何ですか?私は Solaris の経験があまりありませんが、デフォルトのシグナルハンドラを適切に動作させる方法が必要です。