linux进程状态

一.状态

1.分类

运行,阻塞,挂起

2.CPU执行进程过程

在理解各种状态前,我们首先需要理解一下Linux中存放指针的结构体

这里我们的CPU看作一次只能处理一个进程的CPU

a.运行

CPU在执行进程前,需要对进程进行排序,于是用一个队列来进行进程管理---调度队列,CPU依次执行队列中的进程,那么进程如果处于这个队列中或者被CPU调度中的状态称作运行状态

b.阻塞:

在程序运行期间调用软件或者硬件资源,但是如果需要调用的资源没有准备就绪时,需要等待资源就绪,这时该进程状态就会被改为阻塞状态,待资源就绪时再重新放入调度队列并将状态改为运行状态

c.挂起:

如果内存资源不足时,系统会将硬件的等待队列的部分数据代码唤出至磁盘中暂时存储,极端情况下可能会将调度队列队尾的部分数据代码唤出,等待硬件或者资源就绪需要将该进程重新放入调度队列时,再将对应的代码数据唤出至内存。

二.Linux的进程状态

1.进程类别及说明

static const char *const task_state_array\[\] =

{

"R (running)", /*0 */ 运行状态(处于调度队列或者被CPU调度中)

"S (sleeping)", /*1 */ 浅睡眠,可中断睡眠 (阻塞状态)

"D (disk sleep)", /*2 */ 深睡眠,不可中断睡眠 (可理解为阻塞状态的一种特殊情况)

例如在对磁盘进行写入时,进程需要知道是否写入成功,或者写入状态等信息,所以必须要等待磁盘返回的信息,如果这时候是传统的阻塞状态,那可能导致进程没有获取到磁盘的返回的信息就被中断或者杀掉了,如此一来可能造成数据的丢失且用户不知道,所以需要一种不可以被中断的状态,等完成它自己的工作后,自己再将这种状态变为其他状态,这种状态就是D状态

"T (stopped)", /*4 */ 暂停状态(ctrl + z 即可且为T状态,或者使用kill中相应的选项,取消暂停也可以用kill中的选项,kill -l可以查看选项列表)

"t (tracing stop)", /*8 */ 暂停状态(debug调试的时候在断点处停下就是t状态)

"X (dead)", /*16 */ 死亡状态 (进程状态如果为该状态会立刻被系统杀掉)

"Z (zombie)", /*32 */ 僵尸状态(代码数据已经执行完,但还需要给父进程返回执行结果(结果相关信息存在task_struct中),这时候该进程状态就是僵尸状态,如果父进程一直不获取僵尸状态的进程的退出信息,该进程将会一直维护自己的PCB,这样就会导致内存泄漏)

};

2.内存泄漏问题

进程退出了,内存泄漏问题还在不在? 不在,系统会自动回收相关的内存

那么什么样的进程具有内存泄漏问题?常驻内存的进程(僵尸进程/申请大量内存空间的进程)

3.task_struct频繁申请释放问题

由于进程的频繁申请释放,会影响效率,所以系统可以将已经杀掉的进程的task_struct放入一个比如叫做unuse的链表中,在有新进程时,直接从unuse链表中拿取一个task_struct初始化给新进程即可

相关推荐
ManageEngineITSM7 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
CANI_PLUS7 小时前
电脑文件共享
运维·服务器
Decay__7 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
Linux界最忧郁之人7 小时前
华为云ECS&IMS&AS实战|弹性云服务器、私有镜像、弹性伸缩完整实验
linux·运维·服务器·centos·华为云·openstack
后台模板学习7 小时前
GitHub Actions 与 Jenkins 在日志监
运维·github·jenkins
whyutianict_vv8 小时前
零基础转 AI 运维:投入清单、技术路线与核对表
linux·运维·人工智能·ai
无言听风雨丶8 小时前
systemd 与信号 / 僵尸进程:Linux 进程管理的底层逻辑与排错
linux·服务器·网络
DevOpenClub8 小时前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
小贾要学习8 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
g5zhu58968 小时前
没有公网ip的情况下,本地能ping服务器服务器不能ping本地,让服务器能访问本地某端口的简单方法
服务器·网络协议·tcp/ip