【Linux系统编程:进程】——【操作系统与进程管理】

🥰个人专栏: 《C++知识分享》 《Linux 入门到实践:零基础也能懂》
🌠 有善始者实繁,能克终者盖寡

索引与导读
前言
Hello 各位码农们 好久不见了
近期一直忙于考研复习当中,实在抽不出时间去学习Linux相关知识
好不容易放假回归,那么本期我们简单讲讲——关于Linux系统编程中的进程概念
进程是所有Linux学习者永远绕不开的话题:
- 进程是操作系统资源分配的基本单位
- 进程是理解
CPU调度、内存管理的基础
一、程序 vs 进程
| 维度 | 程序 | 进程 |
|---|---|---|
| 定义 | 静态的指令集合 | 运行中的程序 |
| 存在形式 | 磁盘上的二进制文件(如编译后的 ./test) |
内存中的实体,操作系统资源分配的基本单位 |
| 资源占用 | 不占用系统运行资源(仅占磁盘空间) | 占用 CPU、内存、I/O 等系统资源 |
| 生命周期 | 永久存储,除非被删除 | 动态的,有创建、运行、销毁的过程 |
二、操作系统与进程的关系
操作系统(OS)是进程管家,职责是涵盖了进程的完整生命周期
- 创建:将程序从磁盘加载到内存
- 管理与调度:决定哪个进程优先使用
CPU,确保系统高效运行 - 销毁:在进程结束时回收其占用的资源
三、Linux操作系统的核心逻辑
OS 的核心是 “管理”,管理进程的本质是 — 先描述进程,再组织进程
- 我们根据几张图片来理解:


- 关于什么是
task_struct,什么是PCB,我们后面会逐一讲解


总结:OS通过 描述(PCB)+组织(链表)+管理(调度),实现对多个进程的有效管理
补充知识点:PCB进程控制块 与 task_struct
1. PCB进程控制块
既然 OS 要管理进程,首先得 认识进程
既然 OS 要管理进程,当然也需要一个信息记录表
这个信息记录表就是PCB(Process Control Block,进程控制块)
进程信息会被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
2. task_struct 核心内容
在 Linux 内核眼中,一个进程是一个实实在在的结构体(对象),而不是一段飘忽不定的代码,这个结构体就是是——task_struct
每个进程都会有且仅有一个 task_struct,它包含了进程的所有属性OS通过操作task_struct来管理进程,而非直接操作进程本身
我们需要记住 task_struct 的几类核心信息:
-
标识符(PID/PPID):进程的 身份证
PID是进程的唯一标识符,用来区分系统中的所有进程PPID是父进程ID,记录该进程由哪个进程创建
-
进程状态:记录当前进程的**地址空间(虚拟地址空间)**和 页表,关联进程占用的内存资源(代码和数据)
- 虚拟地址空间 (mm_struct):在 task_struct 中,有一个非常关键的指针字段叫 mm,它指向一个 mm_struct 结构体。这个结构体完整地描述了一个进程的虚拟地址空间

- 页表:将虚拟地址映射到物理地址的桥梁就是页表
- 虚拟地址空间 (mm_struct):在 task_struct 中,有一个非常关键的指针字段叫 mm,它指向一个 mm_struct 结构体。这个结构体完整地描述了一个进程的虚拟地址空间
-
程序计时器(PC):记录进程下一条要执行的指令地址。
-
内存指针:指向进程的地址空间,包括程序代码和进行相关数据的指针,还有其他进程共享的内存块的指针
-
优先级:相对于其它进程的优先级
-
上下文数据:进程执行时处理器的寄存器中的数据
-
I/O 状态信息:包括显示的
I/O请求,分配给进程的I/O设备和被进程使用的文件列表 -
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等
-
其他资源:比如进程占用的
CPU时间,打开的文件描述符等
四、Linux如何管理海量 task_struct?
1)OS 用链表管理 task_struct
系统中会同时运行成百上千个进程,也就会有成百上千个 task_struct,OS 不可能零散地管理这些结构体,必须用高效的数据结构将它们组织起来
OS用链表或红黑树管理task_struct- 链表:适合进程数量较少的场景,通过
task_struct中的next/prev指针,将所有进程的task_struct串联起来,遍历效率适中 - 红黑树:适合进程数量较多的场景(比如服务器上的上千个进程),红黑树的查找、插入、删除效率是 O ( log n ) O(\log n) O(logn),远高于链表,
Linux内核在进程较多时会自动切换为红黑树管理
- 链表:适合进程数量较少的场景,通过
核心目的:让 OS 能快速找到需要调度的进程(比如找到优先级最高的进程),同时也能快速管理 fork 创建的进程(将子进程的 task_struct 加入链表 / 红黑树)
2)查看进程
途径一:通过 /proc 目录查看
/proc是Linux内核给用户态的虚拟文件系统,每个正在运行的进程都会在/proc下对应一个以其PID(进程ID)命名的文件夹
每个数字都代表当前系统正在运行的所有进程的PID
途径二:大多数进程信息同样可以使用top和ps这些用户级工具来获取
1)top 命令:动态实时监控
top 类似于 Windows 的任务管理器,它会实时刷新显示 CPU 和内存占用最高的进程
- 操作:直接在终端输入
top并回车 - 关键信息解读:
%CPU/%MEM:进程占用的资源比例PID:进程ID,用于标识唯一进程COMMAND:进程的名字
- 常用快捷键:
M:按内存占用排序P:按CPU占用排序(默认)q:退出top界面
2)ps 命令:静态进程快照
ps 用于获取执行命令那一刻的进程信息
2.1)常用组合一:ps aux
a:显示所有终端下的进程u:显示进程的所有者(用户)信息x:显示没有控制终端的进程(后台进程)
2.2)常用组合二:ps -ef
查看进程的父子关系(UID, PID, PPID):
PID:进程的唯一标识号UID:运行该进程的用户。这里全是root(超级管理员)PPID:父进程ID这在分析fork()产生的多进程程序时非常有用

2.3)结合 grep 过滤
如果你只想找特定的进程:
# 假设你想查找名字里包含 "bash" 的进程
ps aux | grep bash
💻结尾— 核心连接协议
警告: 🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠
【📡】 建立深度链接: 关注本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。
【⚡】 能量过载分发: 执行点赞操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。
【💾】 离线缓存核心: 将本页加入收藏。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。
【💬】 协议加密解密: 在评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。
【🛰️】 信号频率投票: 通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。


openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)