背景:采用fork 父子进程互相争夺cpu 如
int main(){
pid_t pyd;
int data;
pyd = fork();
if(pyd>0){
while(1){
printf("the is father pid data is :%d\n",getpid());
sleep(1);
}
}
else if(pyd==0){
while(1){
printf("the is father pid data is :%d\n",getpid());
sleep(1);
}
}
return 0;
运行结果为
^[the is father pid data is :20177
the is father pid data is :20178
the is father pid data is :20177
the is father pid data is :20178
vfork函数 也可以创建进程,与fork有什么区别
关键区别一:
vfork 直接使用父进程存储空间,不拷贝。
关键区别二:
vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行
例如
int main(){
pid_t pyd;
int data;
int cnd=0;
pyd =vfork();
printf("cnd data is: %d\n",cnd);
if(pyd>0){
while(1){
printf("the is father pid data is :%d\n",getpid());
sleep(1);
}
}
else if(pyd==0){
while(1){
printf("the is father pid data is :%d\n",getpid());
sleep(1);
cnd++;
if(cnd==3){
exit(0);
}
}
}
}
return 0;
}
运行结果为:
cnd data is: 0
the is father pid data is :20335
the is father pid data is :20335
the is father pid data is :20335
cnd data is: 3
the is father pid data is :20334
the is father pid data is :20334
the is father pid data is :20334
vfork是先子后父
问题:
exit(0) 不是特别清楚