在 Linux
中,进程控制有四种状态:创建、退出、等待、替换。
本篇博客讲述 等待 状态下的一些事:
等待:父进程等待子进程退出,获取退出子进程返回值,释放退出子进程资源,避免出现僵尸进程;
进程等待:等待子进程退出,获取子进程返回值,释放子进程资源,避免出现僵尸进程!!!!!
以下与 等待 状态相关的函数,使用时需包含 头文件 #include<sys/wait.h>
1)wait()
pid_t wait(int *status);
等待任意一个子进程退出,通过 status
获取退出返回值,释放资源
返回值:成功则返回子进程的pid;错误返回-1
2)waitpid()
pid_t waitpid(pid_t pid,int *status,int options);
可以等待任意子进程退出,也可以等待指定的子进程退出
可以阻塞等待子进程退出,也可以非阻塞等待子进程退出
参数说明:
pid
: 若为 -1,则等待任意子进程;若大于0,则等待指定子进程
options
:0 即默认阻塞等待; WNOHANG
即非阻塞等待
进程返回值:status
高8位为进程返回值,
低8位中的第8位(由低到高的第8位)为 core dump
,当异常退出时,将所有运行信息全部保存在core文件中,便于异常后的调试;其低7位 – 异常退出值,若为0,正常退出,反之为异常退出
(注意:core文件内存很大,且有安全隐患!!!!!!所以core dumped默认关闭)
返回值:成功则返回值大于0,会返回子进程的pid,没有子进程退出则返回0,只有在非阻塞条件下存在;错误返回 -1。
waitpid(-1,NULL,0)
等价于 wait(NULL)