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

(二)进程的状态优先级

1进程的状态(兼容所有操作系统)

1.1并行和并发

CPU执行进程代码,不是把进程代码执行完毕,才开始执行下一个
而是给每一个进程预分配一个 时间片,基于时间片,进行调度轮转(单CPU下),并发。

并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

1.2时间片

Linux/windows民用级别的操作系统,分时操作系统。-----调度任务追求公平

对应的实时操作系统,会有优先级,比如汽车的刹车。

1.3进程具有独立性(讲过了)

1.4等待的本质

1.4.1 运行状态

FIFO:先进先出。头结点的进程进入CPU运行一段时间,然后尾插到队列后,然后进入下一个进程,循环往复。

只要进程在运行队列中,该进程就叫做运行状态(我已经准备好了,随时被CPU调度)

1.4.2 阻塞状态

运行:进程等CPU。

阻塞:进程等待键盘等其他硬件。(运行和阻塞是两个队列)

运行和阻塞的本质:是让不同的进程,处在不同的队列中。

操作系统是硬件管理者,知道硬件有无数据。

执行完scanf,进程从运行到阻塞,输完数据,操作系统知道后,将进程从阻塞到运行。(将进程尾插到不同队列)

1.4.3挂起状态

背景:内存资源严重不足的情况下

1.状态:在tast_struct中通过status表示,比如1表示运行,2表示阻塞等等

2.内存资源不足时,占了内存资源且处于排队阻塞状态的进程会被换出唤入到swap分区(磁盘内),让其处于阻塞挂起状态。

3.换出:从内存到磁盘是IO,速度慢,用时间换空间,一般会被禁掉。如果swap分区不够,操作系统会杀死部分进程。

4.运行挂起:将运行状态的进程挂起。有风险,一般不会这么做。

2.Linux进程的状态

2.1 运行状态、阻塞状态

R:运行状态

S:休眠状态---阻塞等待的状态-----可中断睡眠,浅睡眠(就是将阻塞的进程可以直接kill掉)

ps axj | head -1 && ps axj | grep code code是可执行程序名字

while(1) { printf("hello world\n"); //该代码运行时,99%是S状态,阻塞状态,因为printf属于向IO相互 //速度会变慢 } while(1) { //100%是运行状态 }

2.2磁盘休眠----D

阻塞等待的状态的一种------不可中断睡眠,深度睡眠

当一个进程内存向磁盘写入大量数据时,磁盘本身比较慢,所以存入需要时间。假设内存那个进程名字叫A,A从内存到磁盘过程中(1.队列发生变化 ----CPU到磁盘 2.状态从R到S)。这是会有两种坏情况1:内存不够用,操作系统把进程A杀死了, 2:磁盘满了,存不下去,需要返回错误值给进程A,让上层知晓该情况,但是进程A不存在了。

为了解决以上情况,D状态出现了,深度睡眠,不可被杀掉

2.3T状态(了解)

kill - 19 PID :暂停进程,使其状态为T

kill -18 PID :重新开始暂停进程。放入到后台执行,无法用Ctril+C操作终止

需要用kill -9 PID终止。

前台进程和后台进程区别:

./code当执行这个指令,该可执行程序开始运行,往屏幕打印东西,这时往屏幕写入指令是无效的。

./code &让该进程处于后台进程,该可执行程序开始运行,往屏幕打印东西,这时往屏幕写入指令是有效的。

有些下载等操作,不想让它阻塞命令行,就让它去后台执行

2.4 t状态

当进程被追踪的时候(被调试程序的进程),断点停下,进程状态就是t。常见于gdp调试代码打断点时。

while :;do ps axj | head -1 && ps axj | grep code|grep -v grep;sleep 1;done
生成一个监视的功能

makefile文件

code:code.c gcc -o $@ $^ -g //这个g表示生成gdb文件,用于调试 .PHONY:clean clean: rm -f code

2.5X状态

echo $? 显示最近一个进程的退出信息 0:执行成功 非0:出错

main函数返回值就是父进程/操作系统的执行情况。

2.6Z状态

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

相关文章:

  • 国产第二代SiC MOSFET在直流充电桩电源模块中的设计与实践
  • syncpack 性能优化秘籍:如何加速大规模依赖检测与修复
  • 肺结节检测-目标检测数据集(包括VOC格式、YOLO格式)
  • 基于RAG与智能分块构建LLM本地知识库:llm-books开源工具实战
  • Decepticon:AI对抗性攻击防御工具箱与基准测试实战指南
  • 嵌入式内存管理实战:从静态分配到动态池化,构建稳定系统的核心策略
  • 2026河北电力设备采购参考:箱变厂家、箱变壳体定制与高低压开关柜靠谱厂家实力对比 - 栗子测评
  • AI智能体实战:从核心原理到多智能体系统构建指南
  • Cisco-Images-for-GNS3-and-EVE-NG:解密QEMU镜像命名规则与部署要点
  • Dot自定义配置指南:调整模型参数满足个性化需求
  • 【RT-DETR实战】033、自适应空间特征融合(ASFF)改进:让RT-DETR的特征金字塔“聪明”起来
  • Bandit配置详解:10个关键参数优化你的Elixir应用服务器
  • 2026河北电力设备生产厂家全解析:变压器、箱式变压器及光伏风电设备优质供应商推荐指南 - 栗子测评
  • java微服务驱动的社区平台:友猫社区的功能模块与实现逻辑
  • 终极指南:3个简单技巧让Playnite游戏库界面焕然一新
  • C语言内存错误全解析:从原理到实践的10类陷阱与防御
  • SAP 授权值维护的细节,别把权限对象当成一张简单配置表
  • 告别手动取模!用ESP32+MicroPython驱动OLED显示任意汉字(附GB2312字库文件)
  • 如何利用awesome-clothed-human资源构建你自己的虚拟试穿系统?
  • Get cookies.txt LOCALLY:浏览器Cookie本地导出实战指南
  • Pinecone官方示例库实战指南:从向量数据库原理到RAG系统搭建
  • 《Obsidian Excalidraw插件配置与使用指南》
  • dingtalk-openclaw-connector:打通钉钉与AI的插件化连接器架构解析
  • KubeDiagrams与其他Kubernetes可视化工具的对比分析:为什么它是生成架构图的终极选择
  • NewLife.Core配置系统深度解析:XML/JSON/HTTP多源配置实战
  • Jenkins磁盘空间优化:Artifact Cleanup Plugin自动清理归档文件实战
  • 大模型高效微调实战:从LoRA/QLoRA原理到Hermes工具链部署
  • {{file.name}} 标注摘要
  • 技能驱动型项目管理工具skillpm:从任务分配到人才匹配的智能升级
  • 渝八两餐饮加盟品牌2026精选:餐饮/鸡公煲加盟十大品牌/排名推荐渝八两 - 栗子测评