子进程是父进程的一段拷贝,在fork的时候除了pid,父进程的资源都拷贝给了子进程,假如在fork之前代码中有一个全局变量,那么在fork之后变量在内存中的地址是不会发生变化的,也就是说父进程和子进程中这个变量的地址是一样的,假如我们定义了一个全局变量,那么我们知道,在程序的运行的时候,他存放在 全局数据区了 也就是BSS区.
接着看一段代码
#include<stdio.h>
#include<unistd.h>
#include<error.h>
#include<stdlib.h>
int g_val = 100;
int main () {
int pid = fork();
if(pid < 0 ){
perror("fork error");
return 0;
}
if(pid == 0){
g_val = 0;
printf("child: %d g_val = %d,&g_val = %p\n",getpid(),g_val,&g_val);
}
if(pid > 0){
sleep(3);
printf("parent : %d g_val = %d,&g_val = %p\n",getpid(),g_val,&g_val);
}
return 0;
}
运行结果