[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