Linux系统编程篇进程三vfork函数的用法和(fork)的区别
1.vfork直接使用父进程存储空间,不拷贝
2.vfork保证子进程先运行,当子进程调用exit后,父进程执行
// fork
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid=fork();
if(pid>0){
while(1){
printf("父进程pid=%d\n",getpid());
sleep(1);
}
}
else if(pid==0){
while(1){
printf("子进程pid=%d\n",getpid());
sleep(1);
}
}
return 0;
}
//结果
父进程pid=13342
子进程pid=13343
父进程pid=13342
子进程pid=13343
父进程pid=13342
子进程pid=13343
子进程pid=13343
父进程pid=13342
//vfork
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid=vfork();
if(pid>0){
while(1){
printf("父进程pid=%d\n",getpid());
sleep(1);
}
}
else if(pid==0){
while(1){
printf("子进程pid=%d\n",getpid());
sleep(1);
}
}
return 0;
}
//结果
子进程pid=13434
子进程pid=13434
子进程pid=13434
子进程pid=13434
子进程pid=13434
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include<stdlib.h>
int main()
{
pid_t pid;
int a=0;
pid=vfork();
if(pid>0){
while(1){
printf("父进程pid=%d\n",getpid());
printf("a=%d",a);
sleep(1);
}
}
else if(pid==0){
while(1){
printf("子进程pid=%d\n",getpid());
a++;
sleep(1);
if(a==3)
exit(0);
}
}
return 0;
}
//运行结果
子进程pid=13500
子进程pid=13500
子进程pid=13500
父进程pid=13499
a=3父进程pid=13499
a=3父进程pid=13499
a=3父进程pid=13499
a=3父进程pid=13499