#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid = vfork();
if(pid>0)
{
while(1)
{
printf("this is father print,pid= %d\n",getpid());
sleep(1);
}
}
else if(pid == 0)
{
while(1){
printf("this is child print,child pid =%d\n",getpid());
exit(0);
// _exit(0); 功能与exit()一样
// _Exit(0); 功能与上面两个一样
sleep(1);
}
}
return 0;
}
为什么要等待子进程退出:
子进程退出状态不被收集,变成僵死进程(僵尸进程),状态表示为z+。
父进程等待子进程退出:
代码:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include<stdlib.h>
#include <stdio.h>
int main()
{
pid_t pid;
int cnt=0;
int status = 10;
pid = fork();
if(pid>0)
{
wait(&status); //若status为空(NULL)不关心状态,非空则退出状态放在它指向的地址中。
printf("childe quit,childe status:%d\n",WEXITSTATUS(status));//此处需要用宏WEXITSTATUS才可以解析出status的状态
while(1)
{
printf("cnt = %d\n",cnt);
printf("this is father print,pid= %d\n",getpid());
sleep(1);
}
}
else if(pid == 0)
{
while(1){
printf("this is child print,child pid =%d\n",getpid());
sleep(1);
cnt++;
if(cnt == 5) //子进程进行5次后退出
{
exit(3); //退出状态码为3
}
}
}
return 0;
}
waitpid(pid,&status,WNOHANG); //父子进程一起走,等到子进程结束,父进程继续走