URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4037
[ Назад ]

Исходное сообщение
"Зомби"

Отправлено Guest , 05-Мрт-05 23:53 
Есть прога вида
....
while(1) {
int acc=accept(...);
if(acc>0) {

if(fork()==0) {some_function(acc);}
   }
}

Так вот.Когда процесс обслужит клиента,он должен вырубится.Ессно после этого
висит зомби - ps aux выдает <defunct> на неумерших чайлдов.Напомните или киньте ссылку плз как обрабатывать waitpid'om чайлдов чтоб зомби не оставались


Содержание

Сообщения в этом обсуждении
"Зомби"
Отправлено ACCA , 06-Мрт-05 09:37 
>висит зомби - ps aux выдает <defunct> на неумерших чайлдов.Напомните или киньте ссылку плз как обрабатывать waitpid'om чайлдов чтоб зомби не оставались


man wait

просто вызови

wait(NULL);


"Зомби"
Отправлено Guest , 06-Мрт-05 13:53 

>man wait
>
>просто вызови
>
>wait(NULL);


А не подскажете где вызвать wait?
if(fork()==0) {
function();
wait(NULL);
}
Так?


"Зомби"
Отправлено ACCA , 07-Мрт-05 06:53 
>А не подскажете где вызвать wait?

IMHO перед exit или return из main - нормальное место.

Более общий ответ - это вопрос вкуса, где ты будешь ждать окончания работы потомков. Не бойся экспериментировать.


"Зомби"
Отправлено rgo , 15-Мрт-05 06:23 
А ещё вопрос в догонку. А как уже существующих зомбей из списка процессов доубить? А то, бывает, забудешь про чайлда, он висит зомбёй --- раздражает.

"Зомби"
Отправлено NewComer , 15-Мрт-05 10:19 
>>висит зомби - ps aux выдает <defunct> на неумерших чайлдов.Напомните или киньте ссылку плз как обрабатывать waitpid'om чайлдов чтоб зомби не оставались

Проблема детей-зомбей решается следующим образом: надо сказать родительскому процессу, чтобы он сигналы SIGCHLD игнорировал.



"Зомби"
Отправлено Dead Mustdie , 15-Мрт-05 10:25 
>Проблема детей-зомбей решается следующим образом: надо
>сказать родительскому процессу, чтобы он сигналы
>SIGCHLD игнорировал.

Смотря где. Сие непортабельно.