实现进程的等待
目录
概念
父进程等待子进程退出,从而获取子进程的返回值,释放其中的资源.
从而避免产生僵尸进程!
实现过程:
1.因为在我们上面讲过的子进程如果先进行退出的时候,父进程如果没有查询到,就会造成僵尸进程,
2.所以们可以利用进程的等待,让父进程不进行运行,
3.当子进程运行完已经退出的时候,我们在让父进程进行运行,4.这样就不会产生僵尸进程,能够实现进程等待的效果!
实现函数
对于进程等待的实现有两个具体的函数,可以让父进程等待子进程进行退出.
(1) pid_t wait (int *status)
1.等待任意一个子进程的退出,如果没有子进程退出,则阻塞一直等待
2.整型空间地址,获取退出子进程的返回值
3.返回值: 成功返回pid,失败返回-1
4.只要有子进程退出就进行处理,是在程序运行之前退出的也可以
(2) pid_t waitpid (pid_t childpid,int status ,int options)
1.可以等待任意一个进程的退出,也可以进行等待指定进程的退出
2.可以阻塞子进程的退出,也可以是非阻塞
关键字解释
child :-1 表示等待任意的子进程,大于0 表示指定子进程
status:用于获取退出子进程的返回值
options:0 默认阻塞等待 WNOHANG设置为非阻塞等待
返回值: -1错误 0无子进程 有子进程返回子进程的pid
进程等待两种转换方式
1.判断进程是否正常(相同)
status & 0x7f
WIFEXITED(status)
2.获取退出的实际返回值(相同)
(status>>8)&0xff
WEXITSTATUS(status)
这里主要介绍了进程等待的作用以及实现进程等待的两种函数,主要在于理解.