PCB、孤儿进程、僵尸进程
- 孤儿进程:父进程退出,子进程还在运行
- 僵尸进程:子进程已终止,父进程没有回收
Orphan Process
孤儿进程是指父进程已经终止,但子进程仍在运行的进程。当父进程意外终止或正常退出时,其子进程就会成为孤儿进程。
孤儿进程的处理机制:
- 操作系统会自动将孤儿进程的父进程设置为 init 进程(PID 为 1)
- init 进程会负责回收这些孤儿进程的资源
- 孤儿进程可以正常运行,不会对系统造成危害
产生场景:
- 父进程异常崩溃
- 父进程正常退出但子进程仍在执行长时间任务
- 故意创建守护进程时
Zombie Process
僵尸进程是指已经终止但其父进程尚未回收其退出状态的进程。进程终止后,系统会保留其进程控制块(PCB)等信息,等待父进程读取。
僵尸进程的特点:
- 进程已经终止,不占用 CPU 和内存资源
- 但仍占用进程表项,消耗系统资源
- 在进程列表中显示为
<defunct>或Z状态 - 无法被 kill 命令终止
产生原因:
- 子进程已终止,但父进程未调用
wait()或waitpid()回收 - 父进程忙于其他任务,没有及时处理子进程的终止信号
- 程序设计缺陷,忘记处理子进程退出
危害:
- 大量僵尸进程会耗尽进程表,导致无法创建新进程
- 虽然不占用实际内存,但会消耗系统资源
预防和解决方案
预防僵尸进程:
- 父进程使用
wait()或waitpid()主动回收子进程 - 设置
SIGCHLD信号处理程序,异步回收子进程 - 使用
signal(SIGCHLD, SIG_IGN)让系统自动清理
清理僵尸进程:
- 终止父进程,让僵尸进程成为孤儿进程,由 init 回收
- 重启父进程程序
- 系统重启(极端情况)
PCB
进程控制块(PCB,Process Control Block)是操作系统中用于管理和控制进程的核心数据结构。PCB中包含的主要信息如下:
进程标识信息
- 进程ID(PID):唯一标识进程的数字
- 父进程ID(PPID):创建该进程的父进程标识
- 用户ID(UID):进程所属用户的标识
- 组ID(GID):进程所属用户组的标识
进程状态信息
- 进程状态:如就绪、运行、阻塞、挂起、终止等
- 优先级:进程的调度优先级
- 程序计数器(PC):指向下一条要执行的指令地址
- CPU寄存器值:保存进程被中断时的寄存器状态
内存管理信息
- 内存分配情况:进程占用的内存区域信息
- 页表指针:虚拟内存管理中的页表地址
- 段表信息:段式内存管理中的段表
- 内存限制:进程可使用的内存上下限
资源管理信息
- 打开文件列表:进程打开的文件描述符
- I/O状态信息:正在进行的I/O操作状态
- 信号处理信息:信号的处理方式和屏蔽状态
- 网络连接:进程建立的网络连接信息
调度信息
- CPU使用时间:进程已使用的CPU时间
- 等待时间:进程在各种队列中的等待时间
- 调度算法相关参数:如时间片大小、优先级动态调整信息
其他控制信息
- 进程创建时间:进程启动的时间戳
- 进程关系:子进程列表、进程组信息
- 工作目录:进程的当前工作目录
- 环境变量:进程的环境变量设置

浙公网安备 33010602011771号