[Moscow.pm] readline

Ivan Petrov i.petro.77.00 на gmail.com
Сб Мар 30 15:43:15 PDT 2013


есть приложение которое работает примерно в таком цикле

while(1) {
    pipe my $r, my $w;

    if (my $pid = fork) {
    	close $w;

    	while(<$r>) {
            ...
        }
        close $r;
        waitpid($pid, 0);
        next;
    }

    close $r;
    open STDOUT, '>&', $w;
    open STDERR, '>&', $w;
    close $w;
    # тут exec на дочернее приложение
}

каждый раз когда дочка перезапускается видим сообщение в логе.

периодически нахожу это приложение в следующем состоянии:
запущено 2 или даже 3 дочерних приложения.

то есть получается из while(<>) оно вышло и waitpid отработало, но
дочка осталась жива и продолжает себе работать.
я тут поштудировал perldoc на waitpid и на readline но не могу понять
в чем проблема может быть?

PS: задача приложения - держать счетчики по выводимому логу и
рестартить дочку если та по какой-то причине мрет.



Подробная информация о списке рассылки Moscow-pm