fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别:
- fork ():子进程拷贝父进程的数据段,代码段 ;vfork ():子进程与父进程共享数据段
- fork ()父子进程的执行次序不确定;vfork 保证子进程先运行,在调用exec或exit之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行。 如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
下面通过几个例子加以说明:
第一:子进程拷贝父进程的代码段的例子:
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
int main()
{
pid_t pid;
pid = fork();
if (pid < 0)
printf("error in fork!\n");
else if (pid == 0)
{
printf("I am the child process,ID is %d\n", getpid());
}
else
{
sleep(1);
printf("I am the parent process,ID is %d\n", getpid());
}
return 0;
}
运行结果: