设为首页 加入收藏

TOP

fork与进程地址空间
2014-11-23 22:53:50 来源: 作者: 【 】 浏览:1
Tags:fork 进程 地址 空间

进程的地址空间是相互独立的,也就是说,每个进程都有自己的页目录和页表。那么一旦调用fork(),父子进程的地址空间就是两个空间,如果子进程对某部分内存进行了修改,父进程是看不到的。比如下面这个测试:

#include

#include

#include

struct xx

{

int a;

};

int main()

{

pid_t pid;

struct xx s;

s.a = 5;

struct xx* sp = &s;

pid = fork();

if (pid > 0)

{

printf("parent show %p, %p, a = %d\n", sp, &sp->a, sp->a);

sp->a = 4;

//while(sp->a > 0);

sleep(10);

printf("parent show %p, %p, a = %d\n", sp, &sp->a, sp->a);

printf("parent exit\n");//exit(0);

}

else

{

//while(sp->a == 5);

printf("child show %p, %p, a = %d\n", sp, &sp->a, sp->a);

sp->a = -1;

printf("child change a to %d\n", sp->a);

}

return 0;

}

编译运行结果是:

[root@141 test]# gcc test.c

[root@141 test]# ./a.out

parent show 0x7fffe86b64a0, 0x7fffe86b64a0, a = 5

child show 0x7fffe86b64a0, 0x7fffe86b64a0, a = 5

child change a to -1

parent show 0x7fffe86b64a0, 0x7fffe86b64a0, a = 4

parent exit

一切都明了~

调了一晚上的项目,原来是父子进程的处理出了问题。基础知识还是很重要!

本文出自 “小强技术博客” 博客

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Crypto++ 的使用方法 下一篇使用匈牙利算法求解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: