当前位置: 首页 > news >正文

Linux进程(下)

上一篇文章介绍了进程的概念和进程的状态,但进程的知识还有很多,本文继续进行讲解。

进程的管理指令

之前提到过许多对进程进行管理的指令,但没有进行讲解,在这里统一聊聊。

核心指令有四个 ps,top,kill,前后台运行(&,jobs,fg)。

ps 查看进程快照

ps 相当于给系统拍了一张瞬间的照片,可以让我们看清楚有哪些进程。

它有多个参数:

top 动态监控进程

top 可以看作是 Linux 版的任务管理器,它会间隔一定时间刷新一次。

top 显示的信息很多,有:

第一行:系统时间、运行时间、登录用户数、平均负载(1/5/15 分钟)。

第二行:系统当前的总进程数,后面是细分:运行中、睡眠、停止、僵尸进程的数量。

第三行:CPU 使用率。

第四行物理内存使用情况,单位是 MiB(兆字节)。

第五行交换分区(虚拟内存)使用情况,单位也是 MiB。

而列表中的信息为:

PID:进程 ID,进程的唯一 “身份证号” ,用于标识、管理和杀死进程。

USER:启动该进程的用户名,区分系统进程(root)和用户进程。

PR:内核调度优先级,数值越小,优先级越高,越优先被 CPU 调度。

NI:Nice 值,用户可调整的优先级修正值,范围 - 20~+19,数值越小优先级越高。

VIRT:进程申请的虚拟内存总量(单位 KB),包含代码、数据、共享库、交换区等。

RES:进程实际占用的物理内存(常驻内存,单位 KB),反映进程真实内存消耗。

SHR:进程与其他进程共享的内存(单位 KB),如共享库、共享文件映射。

S:进程状态,核心标识。

TIME+:进程累计占用 CPU 的总时间,格式为 分:秒. 百分秒。

COMMAND:启动该进程的完整命令 / 程序名,用于识别进程用途。

kill 杀死进程

kill 可以 “杀死” 一个进程,所谓 “杀死” 就是强制终止。

一般形式是 kill + 进程的 PID 。也可以在 kill 后面加上参数 -9 进行更加强力且暴力的终止。

kill 的本质其实是一个信号发送工具,它的功能不止 终止进程 这一种,但刚开始了解进程的新手,掌握这一个功能就好了。

前后台运行(&,jobs,fg)

这里有三个指令,它们的功能是让程序在后台安静地跑,或者把后台的程序调回前台

&:运行时直接丢到后台。

jobs:看后台有谁。

fg + 数字:把第 n 个 job 调回前台。

进程的优先级

刚才在讲 top 指令时,里面有提到优先级的概念,这是比较重要的内容,值得详细一点讲解。

首先要知道,进程是排队来运行的,而进程的优先级就是该进程在队列中位置的先后关系,优先级越高,就能越早运行。

优先级用数字来表示,数字越小,优先级越高。一个进程的优先级默认为 80 ,我们可以通过 nice 修正值来调整优先级。调整规则为 优先级 = 默认优先级 + nice 值。优先级的范围是 [60,99],可能让人感到有些奇怪,但后面讲调度时会就会知道为什么是这样了。

新手不建议调整优先级,因为可能把握不住,若优先级的设置不合理,会导致优先级低的进程长时间得不到 CPU 资源,这种情况叫做:进程饥饿。

进程的切换和调度

进程的切换

一个处理器,也就是 CPU , 一次只能处理一个进程。但是生活中,我们会看到一些单核处理器的电脑,也能够同时运行多个程序,比如你在写代码时,后台仍然可以播放音乐。这好像违反处理器规则了呀?!事实上,这些进程并不是真正意义上的 “同时” 运行,而是不断地以超出正常人感知的速度切换进程,于是便给人以 “多个进程同时进行” 的错觉。

那么进程是如何切换的呢?

CPU 中的寄存器只有一份,里面存放着当前进程的上下文数据(包括运行到了哪一行代码,进程的状态等数据)。当要切换进程时,将寄存器中的数据保存起来由进程自己 “带走” ,再将进程从 CPU 上剥离下来,换下一个进程。在需要恢复进程时,让进程重新进入 CPU ,并把上下文数据重新恢复到寄存器中。这样,便实现了进程的切换。

进程的调度(O(1) 调度算法)

进程的调度算法有许多,其中较容易理解的是 O(1) 调度算法,虽然已经被 CFS(完全公平调度器)取代,但 O(1)调度算法仍旧是新手理解进程调度的最友好算法。

不管是 O(1) 算法还是 CFS 算法,它们都是一段代码,属于软件,叫做调度器。CPU 执行进程的方式不是直接执行的,中间隔了几层逻辑,系统会为 CPU 维护一个运行队列 runqueue

在 O(1) 调度器中,runqueue 有两个优先级数组结构体(prio_array_t)activeexpired。其中 active 表示活跃队列,也就是当前正在运行的队列。expired表示 过期队列,虽然叫 “过期” ,但 runqueue 是通过交换这两个结构体的内容来维护进程的,所以 expired 又何尝不是 “预备队列” 呢。

优先级数组结构体里面的三个成员

nr_active: 记录当前这个 优先级数组结构体 里,总共有多少个可运行的进程。

bitmap[5]: 优先级位图。

queue[140]:优先级链表数组。

nr_active没什么好说的,重点讲一下bitmap[5]queue[140] ,先讲queue[140]会可以辅助理解bitmap ,所以先讲queue[140]

queue[140]是一个指针数组,每一个指针都指向一个进程队列的头节点(没错,CPU 和 进程 之间隔了两层)。这 140 个位置分为两部分,前 100 位(0~99)是实时进程队列,后 40 位(100~139)是普通进程队列

实时进程的优先级高于普通进程,只要前面还有实时进程在排队,那就永远轮不到普通进程。实时进程是给系统关键任务的专属车道,普通进程才是给我们平时使用的程序用的,比如:QQ,微信。

这个优先级和前面讲到的优先级范围息息相关,优先级范围是 [60,99] 刚好40个位置,可见普通用户是没有权限修改实时进程的优先级的,而优先级的表示数字是如何对应 queue 位置的我们不需要关心。

bitmap[5]是 O(1) 调度器实现 O(1) 调度的关键,用来查看哪个优先级有进程在排队,实现 O (1) 速度!bitmap 有五个整型大小的空间,共 32 * 5 = 160 个比特位,使用其中140个来表示该进程队列是否有进程在排队,同时比特位的位置也对应着进程队列的优先级,所以调度器只要扫描一次就能找到优先级最高的进程队列。

http://www.jsqmd.com/news/599692/

相关文章:

  • OpenClaw龙虾实用使用教程:一键安装工具分享,教“员工”上手,解锁你想要的效果
  • 最长异或子序列解法揭秘,紫外UV相机在机器视觉检测方向的应用。
  • ADS1115高精度ADC驱动库详解:16位分辨率与硬件比较器实战
  • PadComLib嵌入式通信协议栈深度解析与移植实践
  • AI 赋能自动化测试实战:从用例生成到 CI/CD 全流程落地
  • CSS如何优雅地隐藏移动端导航菜单_利用Media Queries与display属性
  • 2026最权威的十大AI辅助写作平台横评
  • 深入解析Java SPI与Spring Boot扩展机制,OpenLayers地图交互 -- 章节十六:双击缩放交互详解。
  • 罗技PUBG鼠标宏压枪技术全解析:从核心挑战到落地实践
  • 微软一口气发布3个AI模型:能听、会说、还能画,实测后我有点意外
  • 我把 Obsidian 接上 Agent 后,第一次感受到“第二大脑会自己进化
  • 智能体的核心要素:构建自主 AI 的六大基石与实战场景
  • MySQL数据库连接数过多怎么排查_使用max_connections参数优化
  • 2026四川建筑建材批发施工优质厂商推荐:泸州树脂瓦批发/泸州活动板房工程/泸州装配式围挡厂家/泸州钛锡板批发/选择指南 - 优质品牌商家
  • 2026q2景观照明设计稳定耐用公司推荐:楼宇照明工程/灯光照明设计/照明工程公司/照明工程施工/照明工程设计/选择指南 - 优质品牌商家
  • 工业4.0下LED可见光通信(VLC)在智能车间的应用实践
  • 太能打了:小卡也能跑的视觉模型!Gemma 4 本地视觉实测,截图转HTML
  • 2026年地产配套防腐木工程服务商推荐榜 - 优质品牌商家
  • Agent 记忆全景综述:20+顶尖机构联合出品,Agent memory看这一篇就够了
  • 2026Q2金华隆胸机构推荐 靠谱之选指南 - 优质品牌商家
  • GT511C3指纹模块嵌入式驱动开发与工程实践
  • OpenClaw多模态编程:Phi-3-vision-128k-instruct辅助代码截图转可执行脚本
  • 深圳聚会优选:轰趴馆为何成为团建及各类聚会的核心选择
  • Go Context 控制流与生命周期管理
  • OpenClaw版本管理:Qwen3-4B-Thinking模型迭代升级策略
  • 2026废旧中央空调回收厂家top10推荐指南:变压器回收厂家/变压器回收报价/四川中央空调回收/选择指南 - 优质品牌商家
  • 2026年4月,天府新区,成都装修公司哪家好,北京我爱我家装饰(成都旗舰店)
  • (学习笔记)3.11 浮点代码(3.11.1 浮点传送和转换操作)
  • 【开源项目】想搞个“预测万物”的数字沙盘?MiroFish 一篇部署教程搞定
  • 双向排序(参照acwing的yxc)