僵尸进程就是父进程创建了一个子进程,但是子进程退出以后,父进程在忙着干自己的事,没有回收子进程,导致子进程一直占用内存资源,这种情况我们称之为僵尸进程。
第一种方式,使用waitpid函数让父进程停下来等待子进程退出,并回收子进程,此时就能解决僵尸进程。在学习了进程信号以后,就有了第二种方式,子进程在退出的时候,会给父进程发送一个SIGCHLD信号,这个时候我们可以使用处理信号的知识来解决这个问题。
目录
2、方式二:设置信号处理方式为SIG_IGN(仅适用于Linux)
一、waitpid函数
下面是waitpid函数的声明以及需要用到的头文件,我们要重点介绍的是,这个函数的参数

1、 第一个参数:准备回收的子进程的pid
如果填入的是子进程的pid,那么就会等待回收指定进程的pid
waitpid(19989, ... , ...); //等待进程pid为19989的子进程
如果填入的是 -1,那么就会等待回收所有进程
2、第二个参数:输出型参数,获取子进程的退出状态
int status;
waitpid(-1 , &status , ... );
status不能简单的当作整型来看,要从二进制的角度来看,子进程正常退出时,子进程返回的是退出码;异常退出时,子进程返回的是一个中止信号。status以二进制的形式保存了这两样东西,保存在低16位,即0~15位,其中 0~6 保存中止信号,7 是core dump标志位,8~15是保存退出码。
想要详细了解的可以看看下面博客中的 “关于status

本文介绍了如何通过waitpid函数和SIGCHLD信号解决子进程僵尸问题,包括waitpid参数的用法、子进程退出信号的理解,以及使用SIGCHLD信号处理函数和设置SIG_IGN的两种方式,确保资源的有效回收。
最低0.47元/天 解锁文章
4717

被折叠的 条评论
为什么被折叠?



