vfork()的体会
来源:互联网 发布:和珅 王刚 知乎 编辑:程序博客网 时间:2024/05/17 22:24
#include <stdio.h>
#include <unistd.h>
int f1()
{
printf( "<----f1---->/n" );
vfork();
printf( "<---->f1<---->/n" );
return 0;
}
int f2(int a,int b)
{
printf( "<----f2---->/n" );
return a+b;
//return 0;
}
int main()
{
int c;
f1();
printf( "<-------------dddddddddd------------>/n" );
c = f2(1,2);
printf( "<--------------fffffffffffff----------->/n" );
printf("%d/n",c);
printf( "<----------------gggggggggggg--------->/n" );
sleep(3);
return 0;
}
运行结果
<----f1---->
<---->f1<---->
<-------------dddddddddd------------>
<----f2---->
<--------------fffffffffffff----------->
0
<----------------gggggggggggg--------->
<---->f1<---->
段错误
体会:
据我分析:f1()函数中用vfork()创建了一个子进程,该进程与f1()共享地址空间,包括代码段,数据段,堆栈段。由于vfork()创建的子进程执行完后才继续执行父进程,并且子进程与父进程共享代码,所以子进程执行
printf( "<-------------dddddddddd------------>/n" );
c = f2(1,2);
printf( "<--------------fffffffffffff----------->/n" );
printf("%d/n",c);
printf( "<----------------gggggggggggg--------->/n" );
sleep(3);
return 0;
最后一句代码由于有“return 0;”,意味着子进程结束。由于子进程和父进程共享代码段,所以父进程也“return 0”。导致子进程和父进程冲突(其中具体情况我也不了解,只是凭个人推测)。
以上观点纯属个人体会,可能有不对的地方,哪位高手如果对此非常熟悉,还请指教!不胜感激!
- vfork()的体会
- vfork的错误用法
- 神奇的vfork
- 神奇的vfork
- 神奇的vfork
- 神奇的vfork()
- 神奇的vfork()
- vfork()的若干问题
- fork, vfork的区别
- 神奇的vfork
- vfork()的若干问题
- 神奇的vfork
- 神奇的vfork
- fork /vfork 的异同
- 神奇的vfork
- vfork的那些事情
- vfork
- vfork
- LoadRunner中调用SHA1算法加密字符串
- 取得并设置记事本的内容
- 3种方式实现的母语优先匹配查询的存储过程
- Java内存模型详解
- VirtualBox网络配置
- vfork()的体会
- 重写equals()还要重写hashcode()说明及举例
- UNIX环境编程--目录和文件
- pku题目经典分类
- [C/C++] Linux下c语言编程的时间函数详解
- CSB+-tree source code
- Ajax入门——XMLHttpRequest对象的使用
- 北大ACM题型分类
- Winforms: Windows 7中Taskbar的新效果(1)——概述