news 2026/2/25 11:12:40

【Linux 进程详解】从 PCB 到 fork

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux 进程详解】从 PCB 到 fork

【Linux 进程详解】从 PCB 到 fork,一篇搞懂进程核心知识

作为操作系统的核心概念之一,进程是程序运行的载体,也是理解 Linux 系统调度、资源管理的基础。本文将从进程定义、PCB 结构、进程与程序的区别,到虚拟内存、进程状态、调度机制,再到fork创建子进程的实操,全面梳理进程的核心知识。

一、进程是什么?

进程是程序的一次运行过程,它会占用系统的 CPU、内存等资源。

而操作系统用于管理进程的核心数据结构是PCB(Process Control Block,进程控制块)—— 每个运行中的进程都对应一个 PCB,存储着进程的关键信息(如 PID、状态、资源限制等)。

二、PCB 的核心内容

PCB 是进程的 “身份证 + 资源清单”,以 Linux 系统为例,其 PCB 包含的关键信息(部分):

  • PID:进程的唯一标识符;
  • 运行状态:如就绪、运行、阻塞等;
  • 资源限制:打开文件数上限(默认 1024)、栈大小(默认 8M)等;
  • 文件描述符表:记录进程打开的文件、设备等;
  • 用户 / 组 ID:进程所属的用户、组权限标识。

三、进程与程序的区别

很多人会混淆 “进程” 和 “程序”,核心差异如下:

维度程序进程
存在形式永久(存储在磁盘的二进制文件)临时(运行时才存在,结束后销毁)
状态变化无(静态文件)有(就绪、运行、阻塞等状态切换)
资源占用不占用系统资源占用 CPU、内存等资源
与其他实体的关系进程间会竞争系统资源
运行方式一个程序可运行多次,生成多个进程一个进程对应一个程序的一次运行

四、进程的虚拟内存

Linux 中,进程的内存空间是虚拟地址空间,通过地址映射表与物理内存关联。这样做的核心目的是:

  1. 隔离性:进程不能直接访问其他进程的内存,避免相互干扰;
  2. 安全性:通过权限控制(如内核空间 / 用户空间划分),防止进程非法访问系统资源。

进程的虚拟地址空间通常分为多个段:

  • Code 段:存储程序的代码指令;
  • Data 段:存储全局变量、静态变量;
  • Heap 段:动态内存分配区域(如malloc申请的内存);
  • Stack 段:存储函数栈帧、局部变量(默认大小 8M);
  • 共享区:用于进程间共享数据(如共享内存)。

五、进程的分类

根据运行特性,进程可分为 3 类:

  1. 交互式进程:需要用户输入、输出的进程(如 Shell、文本编辑器);
  2. 批处理进程:后台自动运行的进程(如定时任务);
  3. 守护进程:长期运行的后台进程(如sshdnginx),通常在系统启动时运行,等待特定事件触发。

六、进程的状态与切换

进程在生命周期中会在多个状态间切换,Linux 中典型的进程状态包括:

  • 就绪态:进程已准备好,等待 CPU 调度;
  • 运行态:进程正在 CPU 上执行;
  • 阻塞态:进程等待某事件(如 IO 完成、信号),暂时无法运行。

状态切换的触发条件:

  • 就绪态 → 运行态:CPU 调度该进程;
  • 运行态 → 就绪态:时间片耗尽,或被更高优先级进程抢占;
  • 运行态 → 阻塞态:进程发起 IO 请求、等待信号等;
  • 阻塞态 → 就绪态:等待的事件完成(如 IO 结束)。

七、进程的调度

Linux 是多任务操作系统,但 CPU 核心数有限,因此需要进程调度来决定 “下一刻哪个进程运行”。

常见的调度算法:

  • 时间片轮转:每个进程分配固定时间片,超时则切换;
  • 短任务优先:优先调度运行时间短的进程;
  • 进程优先级:为进程设置优先级,高优先级进程优先运行;
  • 完全公平调度(CFS):Linux 默认调度算法,以 “公平分配 CPU 时间” 为核心。

八、进程的创建:fork 函数

在 Linux 中,创建新进程的核心函数是fork(),它会复制当前进程(父进程)的 PCB、地址空间等资源,生成一个新进程(子进程)。

fork 的返回值规则

  • 父进程中:返回子进程的 PID(大于 0);
  • 子进程中:返回 0;
  • 创建失败:返回 - 1。

示例:fork 创建子进程

c

运行

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t pid = fork(); if (pid > 0) { // 父进程逻辑 printf("父进程PID:%d,子进程PID:%d\n", getpid(), pid); } else if (pid == 0) { // 子进程逻辑 printf("子进程PID:%d,父进程PID:%d\n", getpid(), getppid()); } else { perror("fork失败"); return 1; } return 0; }

运行结果(示例):

plaintext

父进程PID:1234,子进程PID:1235 子进程PID:1235,父进程PID:1234

九、进程相关的常用命令

  • ps:查看进程信息(如ps aux查看所有进程);
  • top:实时监控进程的 CPU、内存占用;
  • kill:向进程发送信号(如kill -9 PID强制终止进程)。

以上就是 Linux 进程的核心知识,从概念到实操覆盖了进程的生命周期、管理、调度等关键环节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 3:35:44

Wan2.2-T2V-A14B在婚礼场地布置预览中的三维空间表达

Wan2.2-T2V-A14B&#xff1a;用一句话“说”出一场婚礼的视觉魔法 ✨ 你有没有经历过这样的场景&#xff1f;客户坐在你对面&#xff0c;眼神放光地说&#xff1a;“我想要一个梦幻、浪漫、有仪式感的婚礼……但又不要太俗气。” 然后你点头如捣蒜&#xff0c;心里却在疯狂打鼓…

作者头像 李华
网站建设 2026/2/19 19:17:15

为了解决传统M1卡(IC卡)安全性低、易被克隆的痛点,同时兼顾了老旧系统的升级门禁卡被随意复制、NFC模拟以及访客管理难的问题,一款“普通IC卡防复制破解之二维码刷卡门禁读卡器”。

门禁卡被随意复制、NFC模拟以及访客管理难的问题&#xff0c;推出了一款“普通IC卡防复制破解之二维码刷卡门禁读卡器”&#xff08;型号通常为DAIC-MJ-JMRW系列或相关QR版本&#xff09;。这款产品主要是为了解决传统M1卡&#xff08;IC卡&#xff09;安全性低、易被克隆的痛点…

作者头像 李华
网站建设 2026/2/21 9:20:13

有哪些轻松有效防控孩子近视的方法,却一直被家长忽视了?

在孩子近视防控的过程中&#xff0c;家长们往往聚焦于控制电子产品使用时长、督促户外活动等常见方法&#xff0c;却容易忽略一些融入日常、无需额外付出过多精力的关键手段。其中&#xff0c;眼调节训练灯作为一种能在孩子读书、写作业等核心用眼场景中同步发挥作用的工具&…

作者头像 李华
网站建设 2026/2/20 14:02:32

AI能不能帮你做工作汇报PPT?2025评测榜单告诉你答案

年终汇报愁断肠&#xff0c;AI办公来帮忙 又到年终&#xff0c;职场人都忙得晕头转向&#xff0c;其中最让人头疼的就是年终总结报告了。熬夜加班改报告是常有的事&#xff0c;好不容易写好了内容&#xff0c;却又在搭建框架上犯了难&#xff0c;内容显得杂乱无章。就算框架有…

作者头像 李华
网站建设 2026/2/20 5:14:39

B站视频下载终极指南:批量下载高清画质一键搞定

还在为无法离线观看B站精彩内容而烦恼吗&#xff1f;想要轻松实现B站视频下载&#xff0c;享受高清画质的观影体验&#xff1f;今天为大家推荐一款功能强大的开源工具——哔哩下载姬&#xff0c;让你彻底告别在线播放的种种限制&#xff01; 【免费下载链接】downkyi 哔哩下载姬…

作者头像 李华
网站建设 2026/2/22 11:18:39

2026年大模型(LLM)学习终极指南:从零基础到精通,一篇涵盖全部核心技术与实战!

简介 大语言模型技术主要包括预训练、适配微调、提示学习和知识增强等。预训练阶段通过优化任务设计、热启动机制和分层渐进训练等策略提升效率&#xff1b;适配微调包括指令微调和参数高效微调(如Prefix-Tuning、LoRA等)&#xff1b;提示学习涵盖少样本、零样本和上下文学习&…

作者头像 李华