Linux 编程的 fork 和 vfork 的区别
fork函数:
一个进程可以调用fork函数创建一个新进程
#include<unistd.h>
pid_t fork(); //返回值:子进程返回0,父进程返回子进程ID,若出错返回-1
需要注意的是fork函数调用一次返回两次,子进程的返回值是0,父进程的返回值是子进程的PID,因此通常利用这个区别去设置判断语句令父子进程执行不同的操作。
现在的操作系统基本都采用了COW机制,因此不再是完全的拷贝父进程的所有内容了。将会对父进程区域进行一个共享,内核将其权限改为只读,如果父子进程中任何一个进程要修改该内容,则引发页错误并对其进行一个拷贝然后再写。

因为fork函数有两个返回值,还要注意的是一旦调用fork函数就会令其一个函数执行同样的code,因此这里会执行两次判断,父子进程判断的结果也会不同。运行结果如下:

本文详细介绍了Linux编程中fork和vfork的区别。fork函数创建子进程时采用COW机制,父子进程共享大部分内存但对变量修改互不影响;而vfork则直接共享父进程地址空间,可能导致数据混乱,通常用于立即exec新程序。vfork保证子进程先运行,调用exec或exit后父进程才能继续执行,否则可能引发死锁。
最低0.47元/天 解锁文章
2338

被折叠的 条评论
为什么被折叠?



