[Moscow.pm] readline

Dmitry Karasik dmitry на karasik.eu.org
Сб Мар 30 17:02:52 PDT 2013


выглядит чисто ... либо опущены какие-то существенные детали,
либо дочернее приложение делает еще один форк, больше вариантов не вижу

/dk

On Sun, Mar 31, 2013 at 02:43:15AM +0400, Ivan Petrov wrote:
> есть приложение которое работает примерно в таком цикле
> 
> 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org

-- 
Sincerely,
	Dmitry Karasik



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