[Moscow.pm] readline

Гришаев Анатолий 0body0 на rambler.ru
Вс Мар 31 23:30:50 PDT 2013


Есть половина ответа: надо проверять чего возвращает waitpid, иногда он 
ловит не тот пид, или просто вываливается по сигналу.
Был такой опыт...

А как вываливается из while(), по коду не видно...


31.03.2013 2:43, Ivan Petrov пишет:
> есть приложение которое работает примерно в таком цикле
>
> 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