vfork vs fork

来源:互联网 发布:pc离线翻译软件 编辑:程序博客网 时间:2024/05/17 23:02
/**********************************************************************/
vfork用于创建一个新进程,而该新进程的目的是exec一个新进程,
vfork和fork一样都创建一个子进程,但是它并不将父进程的地址空间
完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存放该地址空间。
。不过在子进程中调用exec或exit之前,他在父进程的空间中运行。
vfork和fork之间的另一个区别是: vfork保证子进程先运行,在她调用exec或exit之后
父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作
,则会导致死锁。
/************************************************************************/
一点学习体会:
vfork创建的更像一个用户线程,它和父进程共用用户空间,包括用户堆栈,但是其拥有自己的系统堆栈。创建好后父进程被挂起等待子进程的运行,直到子进程调用 exit后,父进程才会被执行,所以vfork后的子进程一定要小心使用,因为子进程完全可以破坏父进程的数据结构或者堆栈,如果子进程改变了父进程的数据结构,那么它就不能调用exit退出,此外还要保证子进程不改变全局数据,以防父进程不能继续运行。