子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态(僵尸进程)
创建并查看僵尸进程:
(pid_t 其实就是 int 类型),不清楚fork和getpid的读者可移步这里🔗
僵尸进程的危害:
进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于Z
状态
维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在
PCB
中,换句话说,Z
状态一直不退出,
PCB
一直都要维护
一个父进程创建了很多子进程,不回收,就会造成内存资源的浪费。因为数据结构对象本身就要占用内存,这就造成了内存泄漏。
处理僵尸进程的一些方法:
- 重启服务器电脑,这个是最简单,最易用的方法,但是如果你服务器电脑上运行有其他的程序,那么这个方法,代价很大。
- 找到僵尸进程的父进程,将该进程的父进程杀掉。
- 调用wait()或者waitpid()函数