博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux中vfork对打开文件的处理
阅读量:5292 次
发布时间:2019-06-14

本文共 938 字,大约阅读时间需要 3 分钟。

vfork和fork

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

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

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

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 int glob = 8;//全局已经初始化的变量 位于数据段10 int main()11 {12 int var;13 pid_t pid;14 var = 99;15 printf("最开始的glob=%d\tvar=%d\n",glob,var);//输出初始的值16 if((pid=vfork())<0)17 {18 perror("vfork");19 exit(EXIT_FAILURE);20 }else if(pid==0)21 {22 printf("在子进程中,修改后的glob和var为\n");23 glob++;//子进程修改全局变量24 var++;//子进程修改局部变量25 printf("在子进程中\tglob=%d\tvar=%d\n",glob,var);26 _exit(0);27 }else//父进程打印28 {29 printf("在父进程中\tglob=%d\tvar=%d\n",glob,var);30 return 0;31 }32 return 1;33 }

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

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

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

 

转载于:https://www.cnblogs.com/lanjianhappy/p/6874217.html

你可能感兴趣的文章
HTML5的服务器EventSource(server-sent event)发送事件
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
检查 chrome 插件是否存在
查看>>
在mac中,npm安装或者卸载失败,提示没有权限
查看>>
155. Min Stack
查看>>
亚稳态的产生机理、消除办法 (可以理解为什么打拍)
查看>>
<每日 1 OJ> -Table
查看>>
<每日 1 OJ> -LeetCode 7. 整数反转
查看>>
<每日 1 OJ> -LeetCode 13 . 罗马数字转正数
查看>>
c语言用指针定义一个类型进行输入输出
查看>>
数字电路基础知识
查看>>
C语言之“字符”与“字符串”之间的区别解析
查看>>
<每日 1 OJ> -24. The Simple Problem
查看>>
<每日 1 OJ> -内存文件系统
查看>>
<每日 1 OJ> -LeetCode 28. 实现 strStr()
查看>>
<每日 1 OJ> -LeetCode 21. 合并两个有序链表
查看>>
字符串必须申请内存空间
查看>>
字符串与指针
查看>>
Linux上安装git并在gitlab上建立对应的项目
查看>>
<每日 1 OJ> -LeetCode20. 有效的括号
查看>>