zoukankan      html  css  js  c++  java
  • 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 ",str);  
    16.         printf("子进程中str指向的首地址:%x ",(unsigned int)str);  
    17.     }  
    18.     else  
    19.     {  
    20.         sleep(1);  
    21.         printf("父进程中str=%s ",str);  
    22.         printf("父进程中str指向的首地址:%x ",(unsigned int)str);  
    23.     }  
    24. }  
    子进程中str=bello
    子进程中str指向的首地址:bfdbfc06   这里取的是虚拟地址
    父进程中str=hello

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


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

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

    所以出现上面的答案。


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





  • 相关阅读:
    新手学逆向,调试abexcm1过程
    (原创)渗透某国工业系统
    (原创)对某国的一次渗透
    汇编笔记 RETF
    汇编笔记 CALL(1)
    汇编笔记 RET
    大小写转换
    JDK下载太慢?让国内镜像帮助你
    Win7,docker安装后,创建虚拟机分配不了ip错误 err: exit status 255
    Spring事务传播实践与Spring“事务失效”
  • 原文地址:https://www.cnblogs.com/llguanli/p/8794497.html
Copyright © 2011-2022 走看看