linux的fork()函数具体解释 子进程复制父进程什么
Posted llguanli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的fork()函数具体解释 子进程复制父进程什么相关的知识,希望对你有一定的参考价值。
- #include<stdio.h>??
- #include<string.h>??
- #include<stdlib.h>??
- #include<unistd.h>??
- ??
- void?main()??
- {??
- ????char?str[6]="hello";??
- ??
- ????pid_t?pid=fork();??
- ??
- ????if(pid==0)??
- ????{??
- ????????str[0]=‘b‘;??
- ????????printf("子进程中str=%s\n",str);??
- ????????printf("子进程中str指向的首地址:%x\n",(unsigned?int)str);??
- ????}??
- ????else??
- ????{??
- ????????sleep(1);??
- ????????printf("父进程中str=%s\n",str);??
- ????????printf("父进程中str指向的首地址:%x\n",(unsigned?int)str);??
- ????}??
- }??
子进程中str指向的首地址:bfdbfc06 ??这里取的是虚拟地址
父进程中str=hello
父进程中str指向的首地址:bfdbfc06 ?这里取的是虚拟地址
解释:採用“写拷贝技术”,刚fork时候,子进程没有改动数据段的值。则子进程和父进程全部代码共享,同样的物理地址。同样的虚拟地址,
当子进程改动某个变量时候,这个变量才真正复制到子进程,拥有自己的物理地址。可是虚拟地址还是一样,两个同样的虚拟地址指向的是不同的物理地址。
所以出现上面的答案。
这里虚拟地址同样 ? 可是物理地址不一样
以上是关于linux的fork()函数具体解释 子进程复制父进程什么的主要内容,如果未能解决你的问题,请参考以下文章