Почему в данном коде, когда все форки прекращают свою работу, основная функция так же прекращает работу, несмотря на 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; }