fork 父子进程变量之间的关系

       调用fork,会有两次返回,一次是父进程、一次是子进程,因为子进程是父进程的副本,所以它拥有父进程数据空间、栈和堆的副本,它们并没有共享这些存储空间,它们只共享正文段。 我们通过下面的程序验证下。 19 #include<unistd.h> 20 #include<stdio.h> 21 22 int global = 6; 23 24 int main(int argc,char** argv) 25 { 26 int var=10; 27 int pid=fork(); 28 if(pid==-1){ 29 printf("error!"); 30 } 31 else if(pid==0){ 32 global++; 33 var++; 34 printf("This is the child process!/n"); 35 } 36 else{ 37 printf("This is the parent process! child processid=%d/n",pid); 38 } 39 printf("%d, %d, %d /n", getpid(), global, var); 40 41 return 1; 42 }

 

程序的输出:

This is the child process!
20415, 7, 11
This is the parent process! child processid=20415
20414, 6, 10

 

可以看出,子进程的值发生了改变,可以说明,它们并不是共享的。

 

 

我把变量的地址打出来,输出如下:

This is the child process!
20505, 7, 11, 646334744
This is the parent process! child processid=20505
20504, 6, 10, 646334744

 

地址居然是一样的,内容还是不一样,原来这里打印的变量的地址都是逻辑空间, 对于父子进程,它们的逻辑空间一样,但是物理空间还是不同的。所以在多进程编程中,不要寄希望于通过地址来判断两个变量是否相同。

 

 

 

 

 

你可能感兴趣的:(编程,存储)