vfork () не удалось подтвердить утверждение - PullRequest
1 голос
/ 15 октября 2011

Я пытаюсь понять следующий фрагмент кода

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

int main()
{
pid_t pid ;
unsigned int i=0;
pid=vfork();
switch(pid)
{
    case -1: // some sort of error
        puts("fork error");
        break;
    case 0: // the child process 
        while(i<100)
        {
            printf("%d\n", i);
            i++;
        }
        break;
    default: //parent
        while(i<1000)
        {
            printf("%d\n", i);
            i++;
        }
        break;
}
//  _exit(0);
}

И, пожалуйста, не говорите мне, что vfork () - это плохо и тому подобное. Я знаю, что это так, но то, что происходит именно в этом коде, вызывает такую ​​ошибку. Заранее спасибо

1 Ответ

2 голосов
/ 15 октября 2011

Неясно, что вы пытаетесь сделать или понять, но вот слегка отредактированная цитата из руководства :

Функция vfork () имеет тот же эффект, что и fork (2), за исключением того, что поведение не определено , если процесс, созданный vfork (), либо

  1. изменяет любые данные, кроме переменной типа pid_t, используемой для хранения возвращаемого значения из vfork ()
  2. возвращает из функции, в которой vfork () был вызван
  3. вызывает любую другую функцию перед успешным вызовом _exit (2) или одной из функций семейства exec (3)

Вы делаете и 1: i++, и 3 printf("%d\n", i). Чего бы вы ни ожидали, это не сработает.

Как примечание: vfork неплохо. Просто хитрый, опасный, почти бесполезный и удаленный из SUSv4.

...