[devel] q: installer: Killing all remaining processes (forever)
Dmitry V. Levin
=?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Ср Апр 16 02:45:24 MSD 2008
On Wed, Apr 16, 2008 at 01:39:20AM +0400, Evgeny Sinelnikov wrote:
> > Логика такая: поскольку не все процессы после рассылки SIGKILL
> > завершаются, дожидаться появления ECHILD бесполезно.
>
> Логика, как мне кажется, ошибочна... ECHILD приходит, когда последний
> процесс умирает.
Почему вы так решили?
"The waitpid() function shall fail if:
[ECHILD] The process specified by pid does not exist or is not a child of
the calling process, or the process group specified by pid does not exist
or does not have any member process that is a child of the calling
process."
Пример:
$ cat waitpid.c
#include <sys/wait.h>
int main(void)
{
int status;
waitpid(-1, &status, WNOHANG);
waitpid(-1, &status, WNOHANG);
return 0;
}
$ strace -qe waitpid ./waitpid
waitpid(-1, 0xbf88880c, WNOHANG) = -1 ECHILD (No child processes)
waitpid(-1, 0xbf88880c, WNOHANG) = -1 ECHILD (No child processes)
> Приход именно этого сигнала выдавал предупреждение,
> когда не до конца ожидался момент умирания всех процессов перед
> отмонтированием. По сути получается так, что при умирании последнего
> процесса, цикл в обработчике сигнала вынужден получить такую ошибку.
> Поэтому отключение обработчика сигнала перед циклом ожидания
> неверно...
Отключение обработчика сигнала? Мы точно говорим про один и тот же код?
> Это же подтверждено не практике. В моём случае стоит
> ожидание только по этому сигналу, иначе цикл в killall() у меня вообще
> не завершится... Но он завершается, а следовательно ECHILD, как и
> ожидается, приходит...
ECHILD у init произойдёт только в случае если в системе не останется
процессов, у которых ppid==1; такое может произойти, но может и не
произойти. У нас на стенде init не получал ECHILD ни разу.
--
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080416/7a19d914/attachment-0002.bin>
Подробная информация о списке рассылки Devel