我正在编写一个用于制作父子进程的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(根据其副本..)
答案 0 :(得分:6)
fork
导致整个地址空间被复制。这意味着变量将在父进程和子进程中具有相同的地址。
此外,复制的地址空间是独立的。如果子项更改了特定地址的值,则父项将不会看到它。无论谁首先执行,在这种情况下父母将始终打印21
。
您可能会想到线程,其中地址空间在多个线程之间共享。