vfork和fork

  fork()函数是拷贝一个父进程的副本,拥有独立的代码段 数据段 堆栈空间 然而vfork是共享父亲进程的代码以及代码段

  vfork是可以根据需要复制父进程空间,这样很大程度的提高勒性能。

1 例子vfork检测 子进程和父进程值是否一样

 #include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <error.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h> int glob = ;//全局已经初始化的变量 位于数据段
int main()
{
int var;
pid_t pid;
var = ;
printf("最开始的glob=%d\tvar=%d\n",glob,var);//输出初始的值
if((pid=vfork())<)
{
perror("vfork");
exit(EXIT_FAILURE);
}else if(pid==)
{
printf("在子进程中,修改后的glob和var为\n");
glob++;//子进程修改全局变量
var++;//子进程修改局部变量
printf("在子进程中\tglob=%d\tvar=%d\n",glob,var);
_exit();
}else//父进程打印
{
printf("在父进程中\tglob=%d\tvar=%d\n",glob,var);
return ;
}
return ;
}

结果发现:子进程和父进程共享数据空间

2 当把上面的代码vfork改变为fork后的执行结果如下:

结果发现:fork函数创建子进程时候 子进程是父进程的一份拷贝

最新文章

  1. HDU5887 Herbs Gathering(2016青岛网络赛 搜索 剪枝)
  2. PHP foreach使用
  3. [Android]Unit Test for Android
  4. linq 多表分组查询统计
  5. Cocos2d-x移植到WindowsPhone8移植问题-libcurl库移植问题
  6. C++中explicit
  7. c++STL之sort排序
  8. 【深度学习系列】PaddlePaddle之手写数字识别
  9. 201621123040《Java程序设计》第六周学习总结
  10. javascript之cookie对象
  11. 使用proces explorer查看系统gdi
  12. html布局(盒子)
  13. Apollo 10 — adminService 全量发布
  14. IE6浏览器无法打开QQ邮箱
  15. My strength (C-A-R)
  16. 使用Redis做为MySQL的缓存
  17. localstorage和vue结合使用
  18. 【转载】windows 下重置 mysql 的 root 密码
  19. neovim在win10下安装配置
  20. 将java程序打包成exe文件

热门文章

  1. flask如何设置模板语言Jinjia?如何查看路由视图函数映射?
  2. keras函数式编程(多任务学习,共享网络层)
  3. 杭电1863 畅通project
  4. 怎样改动X-code中的字体大小、颜色
  5. 【转载】图说OOP基础(一)
  6. spring中构造函数注入
  7. Android自己定义圆角ImageView
  8. openwrt 模拟i2c驱动(一)
  9. 嵌入式驱动开发之2440/2410---uboot 移植
  10. solr单机多实例部署文件锁冲突解决的方法