在库函数中fork和vfork函数的功能都是:创建一个新的进程
fork和vfork的区别:
1、调用fork函数后,子进程会拷贝父进程中的数据段、代码段、堆栈段,而调用vfork,子进程与父进程共享数据段,不拷贝代码段、堆栈段。
2、调用fork函数后,子进程和父进程的执行次序不确定,而调用vfork后,保证子进程会先运行,但是在调用exec或exit前会在父进程的空间中运行,在子进程调用exec或exit之后父进程才可能被调度运行,当子进程调用这两个函数中的任意一个时,父进程会恢复运行。
注意:
在vfork创建进程后,如果子进程在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。