linux的fork()函数具体解释 子进程复制父进程什么

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的fork()函数具体解释 子进程复制父进程什么相关的知识,希望对你有一定的参考价值。

  1. #include<stdio.h>??
  2. #include<string.h>??
  3. #include<stdlib.h>??
  4. #include<unistd.h>??
  5. ??
  6. void?main()??
  7. {??
  8. ????char?str[6]="hello";??
  9. ??
  10. ????pid_t?pid=fork();??
  11. ??
  12. ????if(pid==0)??
  13. ????{??
  14. ????????str[0]=‘b‘;??
  15. ????????printf("子进程中str=%s\n",str);??
  16. ????????printf("子进程中str指向的首地址:%x\n",(unsigned?int)str);??
  17. ????}??
  18. ????else??
  19. ????{??
  20. ????????sleep(1);??
  21. ????????printf("父进程中str=%s\n",str);??
  22. ????????printf("父进程中str指向的首地址:%x\n",(unsigned?int)str);??
  23. ????}??
  24. }??
子进程中str=bello
子进程中str指向的首地址:bfdbfc06 ??这里取的是虚拟地址
父进程中str=hello

父进程中str指向的首地址:bfdbfc06 ?这里取的是虚拟地址


解释:採用“写拷贝技术”,刚fork时候,子进程没有改动数据段的值。则子进程和父进程全部代码共享,同样的物理地址。同样的虚拟地址,

当子进程改动某个变量时候,这个变量才真正复制到子进程,拥有自己的物理地址。可是虚拟地址还是一样,两个同样的虚拟地址指向的是不同的物理地址。

所以出现上面的答案。


这里虚拟地址同样 ? 可是物理地址不一样





以上是关于linux的fork()函数具体解释 子进程复制父进程什么的主要内容,如果未能解决你的问题,请参考以下文章

Linux入门:进程控制

Linux入门:进程控制

Linux-进程控制

Linux进程控制

Linux进程控制

Linux进程控制