[devel] q: installer: Killing all remaining processes (forever)
Evgeny Sinelnikov
=?iso-8859-1?q?sin_=CE=C1_altlinux=2Eru?=
Ср Апр 16 02:02:08 MSD 2008
2008/4/16 Evgeny Sinelnikov <sin на altlinux.ru>:
> 2008/4/16 Dmitry V. Levin <ldv на altlinux.org>:
>
> > On Tue, Apr 15, 2008 at 09:42:02PM +0400, Evgeny Sinelnikov wrote:
> > > 2008/4/15 Dmitry V. Levin <ldv на altlinux.org>:
> > [...]
> >
> > > > У меня был один простой аргумент: ECHILD не происходит.
> > > > Я сделал коммит, который ждёт ECHILD:
> > > > http://git.altlinux.org/people/ldv/packages/?p=installer.git;a=commitdiff;h=0.4-alt12-1-g713c354
> > > > На практике (в 0.4-alt13) это приводит к таймауту после 20 секунд ожидания.
[...]
> >
> > > По поводу же ожидания в 20 секунд... Совершенно непонятна логика...
> > > ведь чтобы дождаться ECHILD не стоит отрывать обработку SIGCHILD...
> >
> > Логика такая: поскольку не все процессы после рассылки SIGKILL
> > завершаются, дожидаться появления ECHILD бесполезно.
> >
>
> Логика, как мне кажется, ошибочна... ECHILD приходит, когда последний
> процесс умирает. Приход именно этого сигнала выдавал предупреждение,
> когда не до конца ожидался момент умирания всех процессов перед
> отмонтированием. По сути получается так, что при умирании последнего
> процесса, цикл в обработчике сигнала вынужден получить такую ошибку.
> Поэтому отключение обработчика сигнала перед циклом ожидания
> неверно... Это же подтверждено не практике. В моём случае стоит
> ожидание только по этому сигналу, иначе цикл в killall() у меня вообще
> не завершится... Но он завершается, а следовательно ECHILD, как и
> ожидается, приходит...
>
Просмотрел текущие изменения по поводу "Reduce ECHILD wait timeout to
5 seconds" - 0706e8db880cc8a650fb0dda7427079a09a9eb11.
Думаю, что уменьшение времени здесь конечно помогает, но это опять
игра race conditions... На самом деле достаточно убрать
chld_handler(0); И время можно будет ставить сколь угодно долгим...
--
Sin (Sinelnikov Evgeny)
Подробная информация о списке рассылки Devel