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

Linux 进程管理:状态、优先级与调度核心解析

文章目录

  • 1. 进程状态
    • 1.1 操作系统中状态的说明
    • 1.2 什么叫做阻塞?
    • 1.3 什么叫挂起
  • 2. 具体谈Linux操作系统中的进程状态
    • 2.1 Linux 的七种进程状态
    • 2.2 僵尸进程(Zombie)
    • 2.3 孤儿进程(Orphan)
  • 3. 进程的优先级
    • 3.1 优先级是什么?
    • 3.2 为什么要有优先级?
    • 3.3 查看与修改进程优先级

1. 进程状态

1.1 操作系统中状态的说明

运行、阻塞、挂起

1.2 什么叫做阻塞?

从现象入手:等待硬件就绪。硬件准备就绪谁最先知道?操作系统,操作系统就是硬件的管理者,先描述再组织。

阻塞和运行的本质:是看task_struct在谁提供的队列中。
Linux中第一个用户态进程是init/systemd(PID=1)。

阻塞不止等待硬件,还包括等待锁、等待其他进程释放资源等。

1.3 什么叫挂起

task_struct在内存里,因为内存资源不足,导致进程对应的数据或者代码被交换到swap分区,这种状态叫做挂起。
安装操作系统的盘都要留一个分区,swap分区用于内存扩展。swap分区和我们的磁盘分区一样,只是被隐藏了,我们看不见。
现在使用内存还要涉及换入和换出。

过度swap会导致系统变慢。swap分区存在的本质就是时间换空间。
但是swap不建议太大,太大会导致依赖swap,过度swap会导致分区被占满,系统变慢。

进程都处于运行状态,剩下的还没调度,内存不够依旧换入到磁盘空间,就会出现运行挂起。如果还是不行,Linux OS就会选择性地杀掉一些进程。

2. 具体谈Linux操作系统中的进程状态

进程状态用位图表示

2.1 Linux 的七种进程状态

R:Running,等同于运行+就绪状态。

S:Sleeping,可中断休眠(浅度睡眠),等同于阻塞状态。向进程发送信号也可以杀掉一个进程。

kill-9[进程号]

-9就是信号的意思。

前台进程,往往状态后面带加号。

前后台进程 – TODO
kill -9 发送信号
STAT后面带+的是前台进程,否则是后台进程

D:Disk Sleep,Linux特有的状态,不可中断休眠(深度睡眠),和磁盘有关。等待磁盘IO的过程中,不可能被OS杀掉,只能等磁盘返回信号。
什么情况下会遇到D状态:进程进行大量的I/O操作时。

T:Stopped,暂停状态,触发某种信号让其自己暂停下来,需要人唤醒。

kill-lkill-19[进程号]# 暂停进程kill-18[进程号]# 继续进程

后台进程用&符号启动,前台进程可以从键盘获取输入,后台进程没有办法从键盘获取输入。

t:Tracing Stop,追踪暂停。gdb调试时,父进程向子进程发送信号,让子进程暂停运行,从而达到逐过程执行的效果。
X:Dead,进程死亡,OS回收PCB,进程彻底消失。

2.2 僵尸进程(Zombie)

Z:Zombie,僵尸状态。进程创建之初是为了解决问题的,当进程退出时,只保留进程的task_struct,让父进程或OS获取子进程的退出数据。

为什么要有Z状态?

  1. 进程退出了,退出信息是什么?(main函数的返回值或收到的信号值)
  2. 进程退出了,退出信息保存在哪里?(进程自己的task_struct结构体中)
  3. 检测Z状态进程,回收Z状态进程,本质是在做什么?(获取数据,让task_struct转为X并释放掉)
  4. 具体怎样回收?谁来回收?(父进程通过系统调用wait/waitpid,由OS来回收)

如果父进程不回收子进程呢?
该进程将永远处于Z状态,task_struct不会被释放,永远占据内核资源空间,这种情况就叫做资源泄漏。所以子进程必须被回收!!!

new出来的空间,如果对应的进程结束了,内存泄漏的问题还在吗?不在了。用户层申请的内存是归操作系统管理的,进程结束时OS会回收所有用户态内存。但是,如果进程是常驻进程(守护进程),它不结束,内存泄漏就会持续累积,最终可能导致系统OOM(内存耗尽)。所以常驻进程中必须格外注意内存泄漏问题。

有些软件(如服务器程序、守护进程)是常驻内存的,你不退出它就不退出。这种常驻在内存中的进程叫做常驻进程。常驻进程是不结束的,所以如果不释放内存就会存在内存泄漏。

2.3 孤儿进程(Orphan)

孤儿进程:如果父进程先于子进程退出,子进程就成为孤儿进程,会被系统的init进程(PID=1)或systemd收养,由init进程负责回收。

3. 进程的优先级

3.1 优先级是什么?

  1. 优先级 VS 权限
    权限:决定进程“能不能”获取某种资源(如root权限与普通用户权限)。
    优先级:在进程已经具备获取资源权限的前提下,决定获取该资源的“先后顺序”。

调度队列的本质就是确定优先级。

3.2 为什么要有优先级?

CPU是稀缺资源,设置优先级是为了决定进程获取CPU等资源的先后顺序,从而保证系统的高效运行和关键任务的及时响应。

3.3 查看与修改进程优先级

通过以下命令可以查看进程的优先级信息:

ps-l

输出结果中的PRI列表示进程的实际优先级,NI(nice值)列表示优先级的修正值。

  1. nice值的范围:-20 ~ +19,共40个等级。nice值越小,优先级越高;nice值越大,优先级越低。
  2. 为什么是这个范围?为什么不能随便改?
    • 这是Linux内核的设计决策,既保证了足够的调度粒度,又防止普通用户过度抢占系统资源。
    • 普通用户只能调大nice值(降低自己进程的优先级),只有root用户才能将nice值调小到-20(提高优先级)。
  3. 进程优先级的变化范围是多少?old pri是什么?
    • Linux中实际调度优先级 ≈ 基础优先级 + nice值。基础优先级通常为80,所以实际PRI范围约为 60 ~ 99。
    • old pri指的是进程在被修改之前的旧优先级。高频率修改优先级会导致调度器频繁重新计算和排队,增加系统开销。

欢迎大家批评指正!!!

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

相关文章:

  • 大模型微调实战:原理、技巧与优化方法
  • OCR技术原理、工具选型与工程实践指南
  • Temu商品图翻译API自动化实现方案
  • 实战 WorkBuddy+反爬+爬虫固化 Skill,6大能力搞定浏览器自动化
  • 数据分析项目去哪里找:2026年6大类真实业务项目资源整理 (1) - 资讯速览
  • SolidWorks Flow Simulation项目克隆:高效变体分析与仿真工作流优化
  • 【AI编程】 程序员 AI 提示词工程实战-CRISPE 与 CO-STAR 框架的全场景指南
  • 应届生没有实习经历,怎么证明自己有能力
  • 广州番禺区搬家避坑全指南:破解临时加价套路,现场维权实操方法 - 厚道搬家
  • 2026 年南京漏水不用慌:6 大高频场景专属方案,徽顺虹针对性治理全解析 - 徽顺虹
  • 2026 广州天河区搬家公司 10 公里基础收费标准 街道豪宅写字楼搬迁报价明细 - 厚道搬家
  • 2026毕业论文新手必看!从零写作全程避坑指南|零基础也能一次性定稿通关
  • 数据分析项目去哪里找:我试了6种渠道,这是亲测对比结果 (1) - 资讯速览
  • 量化交易实验框架:从回测到龙头股全仓策略实现
  • Rust与PostgreSQL集成实战:pgrust库环境搭建与性能优化
  • 芝柏中国官方售后服务中心|最新维修地址与官方售后热线权威信息声明(2027年7月最新) - 亨得利官方服务中心
  • AI 电动3D光栅笔智能微型 MOSFET 完整选型方案
  • 2026年7月最新亨得利官方服务项目及价格查询|热线与地址权威信息通知 - 亨得利官方博客
  • 安卓逆向工程实战:JEB反编译工具核心功能与静态分析全流程详解
  • Python科研数据可视化:七大库场景选择与实战避坑指南
  • 2026 北京园区地下室防渗施工品牌对比 空鼓微创修复真实评测榜单.doc - 资讯在线
  • 可湿水卫生纸推荐:联盛森宝浸水坚韧 - MXyuyu
  • 爱彼中国官方售后服务中心|官方电话和完整维修地址权威信息通知(2026年7月更新) - 爱彼中国官方服务中心
  • Python+AI实现一键抠图:Rembg库实战指南
  • 2026寄件价格大比拼,哪种渠道真的帮你省钱 - 生活情报姬
  • 2026年还在被肤质问题困扰?常见各类肌肤问题的表现、隐患与应对思路全梳理 - 产业观察报
  • 2026 年无锡漏水不用慌:6 大高频场景专属方案,徽顺虹针对性治理全解析 - 徽顺虹
  • 宝玑计时指针偏移的精准维修与保养指南权威公示(2026年7月最新) - 亨得利钟表维修中心
  • Rust与PostgreSQL实战:从类型安全到高并发数据库应用开发
  • AI 智能电磁炉高效功率 MOSFET 完整选型方案