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时间
  • 等待时间:进程在各种队列中的等待时间
  • 调度算法相关参数:如时间片大小、优先级动态调整信息

其他控制信息

  • 进程创建时间:进程启动的时间戳
  • 进程关系:子进程列表、进程组信息
  • 工作目录:进程的当前工作目录
  • 环境变量:进程的环境变量设置
posted @ 2025-07-10 15:59  光風霽月  阅读(15)  评论(0)    收藏  举报