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 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.