僵尸进程
僵尸进程
概念:
一个父进程开启了一堆子进程, 当子进程比父进程先运行完(死掉),操作系统会释放子进程占用的重型资源(内存空间, CPU资源, 打开的文件),但会保留子进程的关键信息(PID, 退出状态, 运行时间等),目的是为了让父进程能随时查看自己的子进程信息(不管该子进程有没有死掉),这种已经死掉的子进程都会进入僵尸状态, ‘‘僵尸进程’’是Linux系统的一种数据结构
这些子进程完成执行后会发送一个 Exit 信号然后死掉。这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait 命令来读取子进程的退出状态,并将子进程从进程表中移除。
若父进程正确第读取了子进程的 Exit 信号,则子进程会从进程表中删掉。
但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。
产生原因
程序在运行中奔溃了,估计是框架又帮忙重启了,导致会产生僵尸进程
坏处:
虽然不会浪费内存、cpu资源等文件,但是会浪费pid,多了之后pid会不够用。
解决办法
- 操作系统保留子进程信息供父进程查看
- 当父进程觉得不再需要查看的时候, 会向操作系统发送一个 wait / waitpid 系统调用
- 于是操作系统再次清理僵尸进程的残余信息
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!