{Spam?} Re: [devel] Просьба потестировать
Michael Pozhidaev
=?iso-8859-1?q?msp_=CE=C1_altlinux=2Eru?=
Вс Мар 21 16:13:59 MSK 2004
Sergey Vlasov пишет:
> 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().
>
Понятно. Большое спасибо. Уже просто попробовал убрать WNOHANG, и
программа сделала 1100 порождений процесса, дальше я не стал
дожидаться. Теперь буду знать.
--
Best wishes. Michael Pozhidaev. E-mail: msp на altlinux.ru.
Tomsk state university.
Computer science department. (http://www.inf.tsu.ru)
Подробная информация о списке рассылки Devel