LINUX.ORG.RU

fork() и прерванный sleep()


0

0

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

}
anonymous

Re: fork() и прерванный sleep()

Системные вызовы прерываются сигналами, если не указать обратное. Учить posix сигналы.

Dr_ZLO ()

Re: fork() и прерванный sleep()

sigprocmask тебе поможет

Zmacs ()

Re: fork() и прерванный sleep()

наверное приходит какойннить ALRM или чето такое...

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