当前位置:  技术问答>linux和unix

父子进程中数据地址的问题

    来源: 互联网  发布时间:2016-09-15

    本文导语:  int main() {     int test = 0;     pid_t fork_resault;     fork_resault = fork();     if(fork_resault == 0){         sleep(5);         test++;         printf("child: test = %d, &test = %Xn",test, &test);     } else {         t...


int main()
{
    int test = 0;
    pid_t fork_resault;
    fork_resault = fork();

    if(fork_resault == 0){
        sleep(5);
        test++;
        printf("child: test = %d, &test = %Xn",test, &test);
    } else {
        test ++;
        printf("parent: test = %d, &test = %Xn",test, &test);
    }
}


Ubuntu 8.10 运行输出结果:
parent: test = 1, &test = BFBD7048
child: test = 1, &test = BFBD7048

问题:parent和child中&test怎么都一样的呢?

linux中不是对进程中的页是写时复制的么,那在++后子进程中数据应该到新的页框中去了,那&test的结果不就应该不同了么?请高手帮忙,谢谢。

|
一条一条的给你分析:
1.如果test的地址是一样的,也即是说parent和child中的test是同一个,那么,无论parent和child那个

进程先运行,test++的结果不可能等于1.也就是说,必须有一个test == 2 才对

2.每个进程都有自己一个独立的栈,以及内存区,parent和child是不会共享的.

In Linux, fork() is implemented through the use of copy-on-write pages. Copy-on-write (or COW) is a technique to delay or altogether prevent copying of the data. Rather than duplicate the process address space, the parent and the child can share a single copy. The data, however, is marked in such a way that if it is written to, a duplicate is made and each process receives a unique copy

COW,就是复制到各个进程自己的内存空间里去。所以。parent中的  BFBD7048和child中的 BFBD7048

不是同一个地址,只是相对改进程地址空间的offset或者,其实就是一个虚拟地址。child和parent,在他们

自己看来,自己拥有了全部的内存空间,而感觉不到其他的进程的存在,child感觉不到parent也同样有一块

内存空间。



希望你能理解我上面的解释。

|
楼上正解

    
 
 

您可能感兴趣的文章:

  • 请教,进程通讯问题,除了父子进程能进行通讯外,任意两个进程都可以吗?
  • fork() 父子进程执行顺序问题
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • 父子进程读写文件问题
  • 父子进程共享数据的问题
  • 使用信号量如何让父子进程交替运行?
  • 父子进程问题,高手请进!!!
  • 请教一个父子进程控制的问题
  • 父子进程共享文件描述符问题
  • 高手请进,如何完备的获得进程间父子关系,谢谢!
  • 父子进程通信:内存共享的问题
  • 父子进程通信
  • 父子进程问题
  • 如何理解父子进程修改共享量的运行结果
  • 关于fork后父子进程的关系
  • 父子进程间的数据传输!online!
  • 关于父子进程执行顺序的问题
  • 父子进程间的信号通讯问题
  • fork()的父子进程返回ID
  • apue中父子进程同步的问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于父子共用一个socket的问题?求教。。
  • jquery的父子兄弟节点查找示例代码
  • DevExpress实现TreeList父子节点CheckState状态同步的方法
  • 创建父子进程,实现异步并发,这段代码对吗?
  • 简直崩溃,有个家伙跟我将fork()函数父子进程共享全局变量!是么?
  • 请教个父子进程管道问题
  • 用记录锁fcntl来实现父子进程同步
  • 深入分析父子线程、进程终止顺序不同产生的结果
  • 父子进程拷文件程序的几处不懂得地方
  • 关于父子进程控制
  • 如何可以让父子进程交替输出
  • 父子进程交互输出问题。
  • 兄弟们,出手吧----》父子进程间相互通信问题
  • 管道和父子进程的问题
  • [新手求解]父子进程交替执行的问题
  • 父子进程之间管道通信问题
  • 在用管道通信父子进程遇到问题
  • 在linux下,用共享内存来实现进程间的数据交互,请问如何实现同步?(这些进程没有父子关系)
  • Linux 父子进程使用TCP连接通信connect错误
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 父子进程间通信:1:共享内存2:信号量:父进程里请求信号量错误,高手帮忙


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3