【Linux】进程状态

本文探讨了进程在等待资源时的阻塞现象,解释了为何需要阻塞以及操作系统如何管理进程。同时介绍了挂起状态,Linux进程的不同状态(如R、S、T和Z状态),以及它们在内存管理和进程间通信中的作用。
摘要由CSDN通过智能技术生成

1. 阻塞

进程因为等待某种条件就绪,而导致的一种不推进的状态

2. 为什么要阻塞?

进程要通过等待的方式,等具体的资源被别人使用完成后,再被自己使用
阻塞:进程等待某种资源就绪的过程

以硬件为例,资源可以看作磁盘、网卡、显卡等外设,
比如去银行存钱,存钱申请的单子没了,直接去存,工作人员就会说因为存钱的单子没有就绪所以不能存,再去等一会,等有单子了再来存
没有继续执行存钱的行为,当前所处状态为阻塞状态

3.操作系统层面上如何理解进程等待某种资源就绪呢?

资源
操作系统对于磁盘、网卡、显卡等 资源通过 先描述,在组织进行管理,把设备用结构体描述起来,再用链表组织起来
进程
存在大量的进程,操作系统要进行管理,也要先描述,在组织,就存在了大量的task_struct的结构体,每一个进程都是由task_struct定义出来的对象

4. 总结

阻塞:阻塞就是不被调度
一定是因为当前进程等待某种资源就绪
一定是进程task_struct结构体需要在某种操作系统管理的资源下进行排队

2.挂起

系统中内存的资源特别紧张,把占有内存的并且闲置的数据和代码,交换到磁盘当中,把内存中这部分的代码和数据释放,当该进程等待的资源就绪时,再把存入磁盘的数据和代码换入内存中,并把进程放入CPU中运行
把代码和数据暂时性由操作系统交换到磁盘时,此时的进程称之为挂起状态

3.Linux进程状态

1. R状态

进程只要是R状态,就一定是在CPU运行吗?
不一定
每个进程当中有自己的运行队列,只要该进程在队列中进行排队,运行的进程就会在运行的队列中排队,CPU调度进程时,从队列中挑选指定的进程运行就可以了,这种运行状态就叫做R状态

R状态不直接代表进程在运行,代表该进程在运行队列中排队

2. S休眠状态——可中断休眠

本质是一种阻塞状态
.D休眠状态 ——不可中断休眠
想要往磁盘写入100MB的数据,由于磁盘写入数据很慢,所以进程把自己设置成阻塞状态,若内存资源特别紧张,操作系统就想要把这个阻塞状态的进程干掉,可是此时磁盘依旧还在写入数据,这样做就会使磁盘写入数据失败,最终就会使100MB的数据丢失

若该进程的休眠状态为D状态,使操作系统无法干掉进程,就能解决这个问题

4.T状态——暂停状态

使用kill命令,向指定的进程发信号

5. X状态(死亡状态)&&Z状态(僵尸状态)

X死亡状态只是一个返回状态,你不会在任务列表里看到这个状态,所以这里这是举例时提及,但不会验证
我们创建进程,是为了进程帮我们办事,同时也关心结果,而main函数的返回值是进程的退出码
对于Z状态的理解
如果一个进程退出了,立马X状态,立马退出,你作为父进程,有没有机会拿到退出结果呢?

linux当进程退出的时候,一般进程不会立即彻底退出,而是要维持一个状态叫做Z状态,也叫做僵尸状态
方便后续父进程读取子进程退出的退出结果

僵尸状态危害
在父子进程中,若父进程一直不读取,子进程就会处于Z状态
在父子进程中,若子进程一直处于僵尸状态(即退出子进程,但不回收子进程),就会在内存中一直保留该进程
若父进程创建多个子进程,就是不回收,就会造成内存资源的浪费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值