1.在fork();时,父进程会将自己的内存资源拷贝一份给子进程
int main()
{
int a = 100;
printf("long may the sunshine\n");
pid_t id = fork();
if(id < 0)
{
printf("fork error\n");
return -1;
}
else if(id > 0)
{
printf("father progress:%d,addr a:%p,a:%d\n",getpid(),&a,a);
}
else if(id == 0)
{
printf("son progress:%d,addr a:%p,a:%d\n",getpid(),&a,a);
exit(0);//子进程已经结束,不会运行下面的代码
}
printf("only father\n");
wait(NULL);//等待子进程结束
return 0;
}
运行结果:

2.父子进程拥有相对独立的内存空间,互不影响
int main()
{
int a = 100;
printf("long may the sunshine\n");
pid_t id = fork();
if(id < 0)
{
printf("fork error\n");
return -1;
}
else if(id > 0)
{
a = 200;//更改a的值
printf("father progress:%d,addr a:%p,a:%d\n",getpid(),&a,a);
}
else if(id == 0)
{
sleep(1);
printf("son progress:%d,addr a:%p,a:%d\n",getpid(),&a,a);
exit(0);//子程序已经结束,不会运行下面的代码
}
printf("only father\n");
wait(NULL);//等待子程序结束
return 0;
}
运行结果:

?
|