进程回收:pid_t wait(int*status) ;
功能:回收进程资源,阻塞函数,等待子进程退出后结束阻塞;
参数:子进程退出状态(不接受子进程状态设为 NULL)
返回值:成功“回收子进程的进程号” 失败“-1”
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main{
pid_t pid;
pid=fork();//创建子进程
if(pid<0)
{
perror("fork err");
return -1;
}//类似判断有没有开辟成功
else if(pid==0)
{printf("in child"); while(1);}// 子进程
else
{wait NULL; printf("in parent");return 0;}//父进程
}
pit_t waitpid(pid_t进程号,int*子进程退出状态,阻塞或者非阻塞)
参数:
进程号:>0指定子进程进程号;=-1任意子进程;=0;<-1;
子进程退出状态:NULL
阻塞或非阻塞:"0'阻塞 “WNOHANG”非阻塞
返回值:正常:结束子进程进程号
非阻塞:子进程没结束时“0”;失败“-1”
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
int main
{
pid_t pid;
pid=fork();//创建子进程
if(pid<0)
{perror("pid err");return -1;}
else if(pid==0)//子进程
{sleep(2);printf(“in the child\n”);}
else
{while(1){if(waitpid(-1,NULL,WNOHANG)!=0)
break;}
printf("in parent");
}
}
轮询(非阻塞):循环执行,一直占CPU,消耗CPU资源
阻塞:实时性差