LINUX.ORG.RU

fork && waitpid


0

0
Снова здраствуйте.

Переопределил SIGCHLD. В обработчике сигнала : waitpid ( info->si_pid, &status, 0 ); Где info - siginfo_t.

Создаётся уйма детей(3-7 в минуту). В итоге через 40 -70 минут "работы" появляется зомби. В обработчик SIGCHLD'е "зомби" не попадает, пробовал int retw = waitpid ... ; output ( retw ); В результате в логе вижу только pid'ы нормально завершившихся детей, а pid'a зомби там нету . Вопрос : что я забыл?

Заранее спасибо.

★★★
а если простой wait() попробовать? типа
no1sm ★★
()
это FAQ.

вы можете легко потерять не rt- сигнал, если два или более потомка завершаются одновременно.

idle ★★★★★
()
Ответ на: комментарий от idle
>это FAQ.

Какое? На лоре насколько мне известно FAQ только для General и Security. Если есть для Develop, то можно ссылку?

> вы можете легко потерять не rt- сигнал...

Вы не могли бы разяснить значит не rt- сигнал?

> если два или более потомка завершаются одновременно.

Я читал вроде бы что у сигналов имеется очередь.

fura13 ★★★
() автор топика
Ответ на: комментарий от fura13
> насколько мне известно FAQ только для General и Security.

я не имел в виду этот форум конкретно, просто
это очень известные "грабли"

> Я читал вроде бы что у сигналов имеется очередь.

есть, но только для rt-signals, > SIGRTMIN.
idle ★★★★★
()
На сколько я понимаю это дело ,) у тебя возникает ситуация, когда в один момент времени завершаются больше одного процесса - ты "вычищаешь " только первый. Я бы посоветовал "обернуть" метод очистки в цикл while.
anonymous
()
Ответ на: комментарий от anonymous
Спасибо, я как раз так и сделал - while ( waitpid (-1, &status, WNOHANG)>0);
fura13 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.