fork()函数和vfork()函数的区别

创建进程时主要用到一下两个函数
1:fork()函数
a:如果执行成功,在父进程中将返回子进程(新创建的进程)的PID,类型为pid_t,子进程将返回0,区别父进程;
b:执行失败返回-1;
子进程执行的位置为fork()返回的位置,父子进程对于局部变量(栈空间)执行复制操作,对于文件描述符的文件表信息(文件的读写位置)共享使用。
2:vfork()函数
vfolk()函数创建新进程的时候不复制进程地址空间,而是在必要的时候才申请存储空间。如果子进程只执行exec()函数,则使用fork函数从父进程到子进程的数据空间将不被使用。
exec函数
exec函数族提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了

相比fork函数,vfork()函数可以很大程度上提升性能,vfork只在需要时复制,而一般采用与父进程共享所有资源的方式进行处理。

简单记忆:
fork()函数是复制一个父进程的副本,从而拥有自己独立的代码段,数据段,以及堆栈空间,即成为一个独立的实体。
vfork函数是共享父进程以及数据段。

猜你喜欢

转载自blog.csdn.net/flf1234567898/article/details/106925941
今日推荐