1.fork()与vfork()的区别
关键区别一: vfork 直接使用父进程存储空间,不拷贝。
关键区别二: vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。
2.代码实现
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
int cnt = 0;
pid_t pid;
pid = vfork();
if (pid > 0){
while(1){
printf("cnt = %d\n", cnt);
printf("this is parent pid: %d\n", getpid());
sleep(1);
}
}
else if(pid == 0){
while(1){
printf("this is child pid: %d\n", getpid());
sleep(1);
cnt++;
if (cnt == 3){
exit(0); //break退出的话,会破环cnt的值,打印cnt的值是一个大值
}
}
}
return 0;
}
3.运行结果
break退出:
exit退出:
4.fork创建进程
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
pid_t pid;
pid = fork();
if (pid > 0){
while(1){
printf("this is parent pid: %d\n", getpid());
sleep(1);
}
}
else if(pid == 0){
while(1){
printf("this is child pid: %d\n", getpid());
sleep(1);
}
}
return 0;
}
运行结果:
可以看出,fork()创建进程后,父子进程之间存在竞争cpu的关系