Попадам на малко странна грешка, докато изпълнявам Perl в chroot среда на Solaris 9 (Sparc). Ние използваме персонализиран 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, но трябва да има начин манипулаторите на сигнали по подразбиране да се държат правилно.