2016-02-16 6 views
-1

Итак, я пытаюсь понять процесс форкирования и в следующей программе. У меня есть глобальное целое число, которое обрабатывается как родительским, так и дочерним процессами.Попытка понять разветвление и отношения между родительским и дочерним процессом

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


using namespace std; 


int global = 0; 

int main() 
{ 

    int fork_return; 


    fork_return = fork(); 

    if(fork_return == 0) 
    { 
     global++; 
     printf("Global value in child is: %d \n", global); 
    } 
    else 
    { 
     global--; 
     printf("Global value in parent is: %d \n", global); 
    } 


    return 0; 
} 

Внутри дочернего процесса, глобальная 1

Внутри родительского процесса, глобальный -1

Мой вопрос: Каким образом мы имеем глобальную переменную и то, что происходит с ребенком в основном скрыты от родителя и наоборот?

Мое понимание: то, что происходит в ребенке, скрыто от родителя и наоборот.

Почему это поведение?

+0

Это разные процессы. –

ответ

2

Родитель и ребенок имеют идентичный вид памяти и дескрипторов файлов в то время, когда вызывается fork. После этого каждый из них может свободно идти своим путем. Операция fork была бы непригодной для использования, иначе любое изменение в одном процессе могло бы повредить то, что делал другой.

Смежные вопросы