ChinaUnix.net
相关文章推荐:

fork vfork

/*this .c file demonstrates how to use fork function to generate a new process*/ /*filename:fork.c time:08/06/2009 author:creatory@mail.com when fork success,the process scheduled sequence is unsure. Every one can be scheduled by the scheduled process firstly. So the result is not sure. */ #include #include //fork #include //exit int main(void){ pid_t pid; if((pid=fork())==-1...

by creatory - Linux文档专区 - 2009-08-08 16:45:47 阅读(664) 回复(0)

相关讨论

本帖最后由 vdsvs 于 2011-04-28 23:32 编辑 刚才看了相关资料,说vfork创建的父子进程是共享数据段的,而fork创建的父子进程数据段是拷贝不是共享,那意味着vfork创建后可以共享一些全局变量,那vfork 创建的父子进程之间的通信就不用什么管道、共享等方式了吧,不知道说的对不???

by vdsvs - Linux环境编程 - 2011-04-29 10:29:00 阅读(1901) 回复(3)

vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,vforkfork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存放该地址空间。不过在子进程中调用exec或exit之前,他在父进程的空间中运行。 vforkfork之间的另一个区别是: vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进...

by sy2n - Linux文档专区 - 2010-01-30 23:02:44 阅读(935) 回复(0)

fork创建父进程的身体和档案的拷贝,而vfork只创建父进程档案的拷贝,共享父进程的堆栈。 fork创建的子进程和父进程同时运行,而vfork创建的子进程中,父进程时阻塞的,只有等到子进程正常退出后,父进程才开始执行。如果子进程没有正常调用exit退出,则父子共享的堆栈段就会释放,如果此时父进程再去访问堆栈段中的数据就会出错,提示segmentation fault。 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/...

by huwpeng - Linux文档专区 - 2009-07-11 16:56:04 阅读(921) 回复(0)

本文主要参考《unix环境高级编程》 fork函数:创建一个新的进程 #include unistd.h> pid_t fork(void); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1. fork将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数使一个进程可以获得其所有子进程的进程ID。 fork使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用getppid以获得其父进程的进程ID (进程...

by eelb123 - Linux文档专区 - 2008-10-28 13:18:38 阅读(713) 回复(0)

区别: 1、fork()用于创建一个新进程。由fork()创建的子进程是父进程的副本。即子进程获取父进程数据空间,堆和 栈的副本。父子进程之间不共享这些存储空间的部分。而vfork()创建的进程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit)于是也就不会存放该地址空间。相反,在子进程调用exec或exit之前,它在父进程的空间进行。 2、vfork()与fork()另一个区别就是:vfork保证子进程先运行,在它调用ex...

by songlin226 - Linux文档专区 - 2008-02-29 16:58:36 阅读(695) 回复(0)

各位大虾下面的2个程序的有什末不同吗? 既然exit(0)关闭了标准I/O为什末最后还能显示"vfork test"? int main(void) { if(vfork()==0) { exit(0); } printf("vfork test\n"); exit(0); } int main(void) { if(vfork()==0) { _exit(0); } printf("vfork test\n"); exit(0); }

by rune_zhang - C/C++ - 2005-11-28 18:15:23 阅读(1210) 回复(5)

vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,vforkfork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存放该地址空间。不过在子进程中调用exec或exit之前,他在父进程的空间中运行。 vforkfork之间的另一个区别是: vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的...

by istvh - Linux文档专区 - 2009-10-09 23:00:25 阅读(736) 回复(0)

1. int main() 2. { 3. int status; 4. pid_t pid; 5. pid=vfork(); 6. if(pid==0) 7. _exit(status); 8. if(wait(&status)!=pid)printf("wait error\n"); 9. exit(0); 10.} 为什么不是下面的结果啊 ? wait error 我这样理解: 当运行到5# 父亲程被挂起,子进程运行 运行到7#,子进程结束! 然后父进程运行, 从6#开始 当到8# 因为子进程已经结束,所以wait(&status)返回应该不等于子进程号! 所以 printf()应该运行的! 我的思...

by jqx55ah - C/C++ - 2008-09-10 09:38:06 阅读(1580) 回复(9)

fork vfork exec wait使用 vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,vforkfork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,不会复制页表。因为子进程会立即调用exec,于是也就不会存放该地址空间。不过在子进程中调用exec或exit之前,他在父进程的空间中运行。 为什么会有vfork,因为以前的fork当它创建一个子进程时,将会创建一个新的地址空间,并且拷贝父进程的资源,而往往...

by helight - Linux文档专区 - 2008-04-21 18:35:37 阅读(858) 回复(0)

程序如下: count = 0; pid_t pid; pid = fork(); count++; printf("count = %d\n",count); 目的是测试vforkfork的区别,按说明,vfork是子进程先执行,父进程后执行。那么按设想,这里应该打印2次count,分别是count=1和count=2,但实际是出现了死循环,为什么?

by 来瘟司机 - Linux环境编程 - 2012-04-26 21:22:17 阅读(1221) 回复(2)