孤儿进程和僵尸进程区别
僵尸进程
僵尸进程是已经终止(执行完毕或被杀死)但其父进程尚未收集(wait()
或 waitpid()
系统调用)其退出状态的进程
- 产生原因:当一个子进程终止时,它会向操作系统发送一个信号,表示自己已完成任务。操作系统会释放该进程几乎所有的资源,包括内存和文件描述符。然而,它的进程描述符(PCB,Process Control Block)仍然保留在内存中,以便父进程能够读取它的退出状态(例如,是否成功执行、退出码是多少)。如果父进程没有及时调用
wait()
或waitpid()
来获取这些信息并释放子进程的 PCB,子进程就会一直处于“僵尸”状态 - 特点:
- 它不占用内存空间
- 它会占用一个 PID,因为 PCB 还没有被回收
- 由于 PID 是有限的,大量的僵尸进程可能会导致系统没有可用的 PID,从而无法创建新的进程
- 如何识别:在
ps
或top
命令的输出中,僵尸进程的状态通常显示为<defunct>
或Z
- 处理方法:唯一能清理僵尸进程的方法是杀死它的父进程。当父进程被杀死后,这个僵尸进程就会变成一个孤儿进程,并被
init
进程(PID 1)收养,init
进程会负责清理它。