c父级和子级进程的变量值

时间:2014-06-01 08:18:44

标签: c++ c parent-child

我正在编写一个用于制作父子进程的c代码

int main
{
    pid_t =pid;
    pid=fork();
    int a=21;
    if(pid==0)
    {
        a=25;
        printf("%d child \n",&a);
        printf("%d child \n",a);
    }
    if(pid!=0)
    {

        printf("%d parent \n",&a);
        printf("%d parent \n",a);
    }
}
在父输出和子进程打印的变量a的输出地址中的

是相同的。 我研究过,当我们分叉一个进程时,每个子进程都会创建一个变量副本。 如果这是真的那么地址必须是不同的。

如果这是假的,那么当子进程首先执行时,它将更改存储a的位置的值。 但是我的父进程将值打印为21(根据其副本..)

1 个答案:

答案 0 :(得分:6)

fork导致整个地址空间被复制。这意味着变量将在父进程和子进程中具有相同的地址。

此外,复制的地址空间是独立的。如果子项更改了特定地址的值,则父项将不会看到它。无论谁首先执行,在这种情况下父母将始终打印21

您可能会想到线程,其中地址空间在多个线程之间共享。