{Spam?} Re: [devel] Просьба потестировать

Sergey Vlasov vsu на altlinux.ru
Вс Мар 21 14:48:02 MSK 2004


On Sun, Mar 21, 2004 at 03:03:10PM +0600, Michael Pozhidaev wrote:
[skip]
> void stop()
> {
> 	pid_t p;
> 	killpg(mp, SIGKILL);
> 	while((p = waitpid(-1*mp, NULL, WNOHANG))>0);
> }

Это не сработает.  После вызова kill/killpg процесс не завершается
немедленно (даже при передаче SIGKILL); задержка определяется
планировщиком и в общем случае непредсказуема.  Нужно либо убирать
WNOHANG, либо ожидать завершения любого процесса (тогда зомби будут
удаляться в следующем цикле).

Просто игнорировать SIGCHLD тут нельзя - если запущенный процесс
завершится раньше вызова stop(), его pid может быть использован
повторно, и тогда сигнал пойдёт совсем не туда, куда ожидалось.  Можно
написать обработчик SIGCHLD, сохраняющий информацию о завершении
запущенных процессов, но тогда в start() и stop() потребуется
аккуратное обращение с sigprocmask().
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: отсутствует
Url     : http://lists.altlinux.org/pipermail/devel/attachments/20040321/cf093437/attachment.bin 


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