Linux中关于fork与vfork的详情

fork是在父进程中开辟一份子进程的虚拟空间,其子进程复制了父进程的资源,也包括内存的task_struct。

fork代码如下:

 fork运行结果如下:

 

从运行结果里面可以看出父子两个进程的pid不同,堆栈和数据资源都是完全的复制,子进程改变了count的值,而父进程中的count没有被改变。子进程与父进程count的地址(虚拟地址)是相同的(注意他们在内核中被映射的物理地址不同)

先前我们知道fork是在父进程中开辟一份子进程的虚拟4G空间,而vfork却不创建子进程的虚拟空间了,而是直接和父进程共享一片虚拟空间,当然也间接共享了父进程的物理空间了。

vfovk代码如下:

vfork 运行结果如下:

 

 从运行结果可以看到vfork创建出的子进程(线程)共享了父进程的count变量,2者的count指向了同一个内存,所以子进程修改了count变量,父进程的 count变量同样受到了影响。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值