Linux进程(三)
等待子进程退出
父进程等待子进程退出,并收集子进程的退出状态
子进程状态不收集会变成僵尸进程。
等待函数
wait函数
- 如果其所有子进程都还在运行,则阻塞
- 如果一个子进程已终止,正等待父进程获取其终止状态,取得该子进程的终止状态立即返回
- 如果它没有任何子进程,则立即出错返回
代码案例
int cnt = 0;
int status = 10;
pid = fork();
if(pid>0)
{
wait(&status); //把退出状态存放到status里面
printf("child quit ,child status = %d\n",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,pid=%d\n",getpid());
sleep(1);
cnt++;
if(cnt==3)
{
exit(3);
}
}
}
return 0;
部分参数解析:
status参数:是一个整型数指针
非空:
子进程退出状态放在它所指向的地址中
空:
不关心状态
waitpid函数
第一个参数是fork的返回值,前面讲到fork返回值在父进程中返回的是子进程的id
第三个参数常用:WNOHANG不阻塞
孤儿进程
1.父进程如果不等待子进程退出,在子进程结束之前就结束了,此时的子进程叫做孤儿进程
2.Linux避免系统存在过多孤儿进程,init进程会收留孤儿进程,变成孤儿进程的父进程