Мой канал (дескриптор файла, сокет) ломается (иногда). Я могу воспроизвести его с помощью следующего кода:
my $counter = 5;
alarm(1);
open(FH,"while(sleep 2); do date; done |") or die $!;
while (<FH>) { print; }
close(FH);
BEGIN {
$SIG{ALRM} = sub {
print "alarm!\n";
exit if --$counter == 0;
alarm(1);
};
}
Что будет производить:
alarm!
alarm!
Thu Feb 7 11:46:29 EST 2013
alarm!
alarm!
alarm!
Если я отследю этот процесс, я увижу, что созданная оболочка получает SIGPIPE. Однако процесс Perl благополучно продолжается. Как это исправить?
exit
?? - person mob   schedule 07.02.2013