Почему в данном коде, когда все форки прекращают свою работу,
основная функция так же прекращает работу, несмотря на sleep(10)?
Если этот sleep(10) заменит с помощью infinity loop (for(;;){})
-- такого не происходит. Что прерывает sleep(10),
и не прерывает цикл? Спасибо.
void fork_handler(int num)
{
(void)waitpid(-1, NULL, WNOHANG);
}
void doSmthAgain()
{
pid_t p = fork();
if ((int)p > 0)
return;
printf("child (%ld) is doing smth =)\n", (long int)getpid());
sleep(5);
printf("child (%ld) has done smth =)\n", (long int)getpid());
exit(1);
}
int main(int argc, char** argv)
{
signal(SIGCHLD, fork_handler);
doSmthAgain();
doSmthAgain();
sleep(10);
return 0;
}


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум fork() (2020)
- Форум [fork()+getpid()] Мааа...ленький вопросик (2008)
- Форум fork(), exec(), wait() (2020)
- Форум fork + popen. Залипание на wait при SIGCHLD (2019)
- Форум продолжить работу после обработки signal (2007)
- Форум Как ждать окончания процесса поражденного clone() ???? (2003)
- Форум POSIX таймеры (2011)
- Форум Критическая секция (2008)
- Форум Работа с функциями семейства exec (2017)
- Форум Помогите разобраться с программой! (2020)