Linux——进程等待

进程等待必要性

1.子进程退出,父进程如果不知道子进程退出,就可能造成“僵尸进程”的问题,这就是内存泄露。
2.一旦子进程变成了僵尸进程,KILL - 9也无能为力,没有办法去杀死一个已经死去的进程
3.子进程是父进程为了完成任务而生成的,派发给子进程的任务是否完成了,完成的怎么样,父进程都不知道。父进程需要知道该情况。
4.父进程通过等待的方式,回收子进程的资源,获取子进程退出信息

进程等待方法

API:pid_t wait(int *status)

wait一直阻塞,直到有一个子进程死亡,称为僵尸进程,回收掉僵尸。
返回值:成功:wait返回子进程pid
失败 返回 -1
status:得到子进程的死亡信息

代码如下

这里写图片描述

从代码中看出,如果子进程是正常退出下, 状态码为10。如果退出的状态码不为10,则子进程是被其他信号杀死的。

通过以下指令查看在运行的进程:

 ps -ef | grep wait | grep -v grep

这里写图片描述

这里写图片描述

可以看到如果是正常退出,退出码为10。

使用wait() 函数,父进程获取子进程的退出状态。回收了子进程的资源及其知道了分配给子进程的任务是否完成了。

pid_t waitpid(pid_t pid, int *status, int options);

pid>0 等待指定子进程
pid=0 等待本进程组的任何一个子进程死亡
pid = -1 等待本进程的任何一个子进程死亡
pid <-1 等待|pid|进程组的任何一个子进程死亡

options: 0阻塞
WNOHANG 非阻塞
如果有子进程处于僵尸状态,回收,如果没有,就返回0

我们还可以使用waitpid进行等待:

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/shawei_/article/details/81143206