免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1947 | 回复: 2
打印 上一主题 下一主题

问一个linux下fork的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-04 11:58 |只看该作者 |倒序浏览
我想知道,1、在linux 下, 全局变量是 进程间共享还是独立的,
           2、为什么fork创建进程后,父子进程打出的局部变量地址是一样的呢

我理解的:fork创建进程,实际上是分配一块内存,子进程复制父进程的数据,上下文,等,如果 这样,父子进程的局部变量地址肯定是不一样的啊,为什么下面的程序
实验结果父子进程的局部变量地址是一样的呢
程序:
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <stdarg.h>


int glob = 6;
char buf[]= " a write to stdout\n";


int main(void)
{
pid_t pid;
int var = 0;
var = 88;

printf("%s", buf);;
printf("%s", " before fork\n");

if ((pid = fork()) < 0)
  printf("fork error");
else if (0 == pid) {
  glob++;
  var++;
} else {
  sleep(2);
}

printf(" pid = %d, glob = %d, var = %d.\n address of gloab glob is %ld, address of local var is %ld \n",
         getpid(), glob, var, &glob, &var);
exit(0);
}


测试结果:

[root@localhost c_testy]# ./tst
a write to stdout
before fork
pid = 13072, glob = 7, var = 89.
address of gloab glob is 134518672, address of local var is -1074189712
pid = 13071, glob = 6, var = 88.
address of gloab glob is 134518672, address of local var is -1074189712
[root@localhost c_testy]# uname -a
Linux localhost.localdomain 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:27:17 EDT 2006 i686 i686 i386 GNU/Linux
[root@localhost c_testy]#

论坛徽章:
0
2 [报告]
发表于 2009-02-04 12:25 |只看该作者
fork就是完全复制一个进程,物理内存怎么分配不去管它,两个进程是独立的虚拟地址空间

1、在linux 下, 全局变量是 进程间共享还是独立的,
    不会共享的
2、为什么fork创建进程后,父子进程打出的局部变量地址是一样的呢
    因为两个进程处于独立的虚拟地址空间,虽然实际的物理地址肯定不一样

论坛徽章:
0
3 [报告]
发表于 2009-02-04 13:21 |只看该作者
同意楼上的回答
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP