LINUX.ORG.RU

fork и zombie процесс


0

0

вопрос по моему страшно глупый, но справится я не смог. вот код:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

main()
{
pid_t ch;
if((ch = fork()) == 0)
{
// ..... do something ....
exit(0);
}
sleep(20);
return 0;
}

так вот, при засыпании на sleep(20), в порождённый процесс не умирает, а виден как зомби, и не пропадает, пока жив родитель. а надо чтоб умер. т.к. слип сидит только для отладки, на самом деле весь форк будет сидеть в цикле. родитель не должен умирать никогда, стало быть зомби будут плодится и плодится. зомби не появляется, если к if-у добавить else wait(&status);, но тогда родитель ждет смерти порожденного процесса, а это не надо...

P.S. чтото жутковато вышло с терминами, но вы меня поняли :)

anonymous

обрабатывай в родителе SIGCHLD и в обработчике уже вызывай wait

ananas ★★★★★
()

я не понял, а разве на wait родитель стоять не будет? мне надо чтобы родитель не ждал своё дитя, то есть ни о каких wait-ах не может быть речи. ну или я чего-то недопонял. пошел проверять SIGCHLD

anonymous
()

Ну так и надо поставить игнорирование SIGCLD

io ★★
()

всё, вопрос решился с помощю исчерпывающего, но с первого раза не понятого поста ананаса ;) -

до форка ставим signal(SIGCHLD, handler);, где handler это
void handler(int signo)
{
int status;
wait(&status);
}

спасибо всем огромное, сам точно не догадался-бы

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.