一次调用wait
或waitpid
函数只能回收一个子进程,当有多个子进程时应使用循环。如果想回收指定进程,使用waitpid
函数
函数原型
pid_t wait(int* status);
-
返回值
成功:清理掉的子进程ID
失败:-1(没有子进程)
函数功能
- 阻塞等待子进程退出
- 回收子进程残留资源
- 获取子进程结束状态
进程终止时,操作系统会进行隐式回收。包括关闭所有的文件描述符,释放用户空间分配的内存。但是此时进程控制块PCB仍然会残留在内核中,保留着此进程结束的状态
例子
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
int main(int argc, char* argv[]){
int status;
pid_t pid = fork();
if(pid == -1){
perror("子进程开启失败");
exit(1);
}
if(pid == 0){
printf("子进程开启,子进程ID为:%d;父进程ID为:%d\n",getpid(),getppid());
sleep(10);
exit(11);
}else if(pid > 0){
pid_t exitStatus = wait(&status);
if(exitStatus == -1){
perror("子进程回收失败");
exit(2);
}
if(WIFEXITED(status)){
printf("子进程ID为:%d;退出状态码为:%d\n",exitStatus,WEXITSTATUS(status));
}
while(1){
printf("父进程,父进程ID为:%d\n",getpid());
sleep(1);
}
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)