Есть прога вида
....
while(1) {
int acc=accept(...);
if(acc>0) {if(fork()==0) {some_function(acc);}
}
}Так вот.Когда процесс обслужит клиента,он должен вырубится.Ессно после этого
висит зомби - ps aux выдает <defunct> на неумерших чайлдов.Напомните или киньте ссылку плз как обрабатывать waitpid'om чайлдов чтоб зомби не оставались
>висит зомби - ps aux выдает <defunct> на неумерших чайлдов.Напомните или киньте ссылку плз как обрабатывать waitpid'om чайлдов чтоб зомби не оставались
man waitпросто вызови
wait(NULL);
>man wait
>
>просто вызови
>
>wait(NULL);
А не подскажете где вызвать wait?
if(fork()==0) {
function();
wait(NULL);
}
Так?
>А не подскажете где вызвать wait?IMHO перед exit или return из main - нормальное место.
Более общий ответ - это вопрос вкуса, где ты будешь ждать окончания работы потомков. Не бойся экспериментировать.
А ещё вопрос в догонку. А как уже существующих зомбей из списка процессов доубить? А то, бывает, забудешь про чайлда, он висит зомбёй --- раздражает.
>>висит зомби - ps aux выдает <defunct> на неумерших чайлдов.Напомните или киньте ссылку плз как обрабатывать waitpid'om чайлдов чтоб зомби не оставалисьПроблема детей-зомбей решается следующим образом: надо сказать родительскому процессу, чтобы он сигналы SIGCHLD игнорировал.
>Проблема детей-зомбей решается следующим образом: надо
>сказать родительскому процессу, чтобы он сигналы
>SIGCHLD игнорировал.Смотря где. Сие непортабельно.