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()函数具体解释 子进程复制父进程什么的更多相关文章

  1. [转帖]Linux下fork函数及pthread函数的总结

    Linux下fork函数及pthread函数的总结 https://blog.csdn.net/wangdd_199326/article/details/76180514 fork Linux多进程 ...

  2. linux中fork()函数

    man fork: FORK() Linux Programmer's Manual FORK(2) NAME fork - create a child process SYNOPSIS #incl ...

  3. linux中fork函数详解(转)

    add by zhj: 在Linux,创建进程是用fork(),它其实就是拷贝父进程的数据段和其它数据,这相当于C函数调用中的值传递,这是 此后两者的修改都互不影响.因为两者的数据虽相同,但却在不同的 ...

  4. 【转】linux 中fork()函数详解

    在看多线程的时候看到了这个函数,于是学习了下,下面文章写的通俗易懂,于是就开心的看完了,最后还是很愉快的算出了他最后一个问题. linux 中fork()函数详解 一.fork入门知识 一个进程,包括 ...

  5. Linux中fork()函数详解(转载)

    linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  6. 关于fork函数中的内存复制和共享

    原来刚刚开始做linux下面的多进程编程的时候,对于下面这段代码感到很奇怪, #include<unistd.h> #include<stdio.h> #include< ...

  7. Linux中fork()函数详解(转)

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  8. linux的fork()函数-进程控制

    进程作为构成系统的基本细胞,不仅是系统中独立活动的实体,而且是独立竞争资源的基本实体.它要经历创建.执行.等待.终止等一系列过程. 一.fork入门知识(转载) 一个进程,包括代码.数据和分配给进程的 ...

  9. linux之fork()函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...

随机推荐

  1. DevExpress学习01——下载与安装

    记得刚接触编程时,虽然实现了功能,但用户界面十分丑陋,老师叫我们美化一下界面,不要千篇一律,当时觉得能够写出来功能就洋洋得意了,不觉得界面丑陋.后来,在程序比赛中,我接触了一种第三方控件,它可以快速实 ...

  2. 新浪微博SSO登陆机制(转载)

    原文地址: http://www.cnblogs.com/AloneSword/p/3840548.html 最近在使用sina微博时,经常性交替使用 weibo.com 和 t.sina.cm.cn ...

  3. 在windows资源管理器添加进入当前目录dos窗口的快捷菜单

    regedit.exe进入注册表 定位到HKEY_CLASSES_ROOT\Folder\shell 新建一项cmd,在cmd下再新建一项command,修改command的值为cmd.exe /k ...

  4. MVC模式下值的传递

    公司项目转用MVC开发,故学习总结一下mvc会用到的常用传值方法:       正如大家都熟悉的,MVC路由及运行机制是:       首先,Web 浏览器向服务器发送一条URL 请求,如http:/ ...

  5. 微信小程序 - 各种示例

    示例更新(后续持续更新): 最后一次更新:2018-11-7 小程序-地图显示(调用高德地图.腾讯App) - (2018-11-1) 小程序-上传图片(上传.预览.展示.删除) - (2018-11 ...

  6. 1z0-052 q209_9

    9: You are working on an instance started using the SPFILE. You want to move the Flash Recovery Area ...

  7. bg和fg命令

    linux提供的fg和bg命令,可以让我们轻松调度正在运行的任务   假如你发现前天运行的一个程序需要很长的时间,但是需要干前天的事情,你就可以用ctrl-z挂起这个程序,然后可以看到系统的提示: [ ...

  8. js setTimeout 传递带参数的函数的2种方式

      js setTimeout 传递带参数的函数的2种方式 Created by Marydon on 2018年9月14日 1.准备工作 function sayYourName(param) { ...

  9. github下载源码的三种方式

      从github上下载源码的三种方式 CreationTime--2018年6月7日15点21分 Author:Marydon 1.情景展示 2.实现方式 方式一:直接点击"Downloa ...

  10. SettingsMyEclipse

      迁移时间--2017年5月20日10:39:42 Author:Marydon-----------------------------------MyEclipse单独设置项---------- ...