用fork()和vfork()创建的进程各有何特点
来源:互联网 发布:如何查询端口是否开放 编辑:程序博客网 时间:2024/05/18 02:40
Fork():单调用,双返回函数
1、在一个父进程基础上创建一个子进程或新进程。
通过拷贝当前进程创建一个子进程。
2、根据fork()的返回值确定执行父进程还是子进程代码!
理解:子进程是父进程的一个拷贝。具体说,子进程从父进程那得到了数据段和堆栈段,但不是与父进程共享而是单独分配内存。fork函数返回后,子进程和父进程都是从fork函数的下一条语句开始执行。
由于子进程与父进程的运行是无关的,父进程可先于子进程运行,子进程也可先于父进程运行。
Vfork():
1、 在一个父进程基础上创建一个子进程,但并不把父进程的映像全部复制到子进程中,而只是用复制指针的方法使它们实现资源共享。
2、为避免发生父子进程间数据操作冲突,vfork()保证子进程先于父进程被运行,在子进程调用execve()或exit()后,父进程才有机会被调度运行!
3、用vfork()创建的子进程虽然在名称上仍叫做进程,但实质上它是一个线程
理解:vfork创建新进程的主要目的在于用exec函数执行另外的程序,实际上,在没调用exec或exit之前子进程的运行中是与父进程共享数据段的。在vfork调用中,子进程先运行,父进程挂起,直到子进程调用exec或exit,在这以后,父子进程的执行顺序不再有限制。
两者区别:
1、fork()用于创建一个新进程。由fork()创建的子进程是父进程的副本。即子进程获取父进程数据空间,堆和栈的副本。父子进程之间不共享这些存储空间的部分。而vfork()创建的进程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec (或exit)于是也就不会存放该地址空间。相反,在子进程调用exec或exit之前,它在父进程的空间进行。
2、vfork保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit之后父进程才可能被调度运行。
3、vfork保证子进程先运行,在她调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
- 用fork()和vfork()创建的进程各有何特点
- 【Linux】进程的创建fork()和vfork()
- 进程创建函数fork和vfork的区别
- 进程创建函数fork和vfork的区别
- 通过fork、vfork和clone创建进程
- 进程创建函数之fork()和vfork()
- 用return和exit结束fork和vfork创建的子进程的思考
- fork与vfork创建进程的区别
- 进程创建:fork、vfork、clone
- 进程创建函数fork()、vfork()
- Linux创建进程fork和vfork函数分析
- linux进程创建:fork、vfork和clone联系与区别
- linux进程创建:fork、vfork和clone联系与区别
- linux进程创建:fork、vfork和clone联系与区别
- UC编程7-进程创建函数fork/vfork 和 execl/信号signal的使用1
- linux c之创建进程fork和vfork函数之间的区别
- C进程创建fork与vfork的区别
- 进程控制-进程创建(fork、vfork)
- nrgrep函数分析(2)--搜索参数探讨
- nrgrep函数分析(3)--搜索实现分析
- 刷分
- malloc()与 alloc()区别
- Text-svg元素详解
- 用fork()和vfork()创建的进程各有何特点
- oracle数据文件内部BLOCK结构详解
- 网站的SEO优化
- GRASP模式总结
- java 中的 Enmu 的用法
- 001-0003 一些asp.net的学习文章
- oracle 分区概念介绍
- Java关键字new和newInstance方法的区别
- 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)