《Linux篇》进程状态——浅度、深度睡眠状态、僵尸状态、运行状态

文章目录

进程状态

传统教材里面的进程状态:

进程最核心的是task_struct,里面就有个状态的属性status,用来标识当前进程属于什么状态,状态就是一个数字。

运行状态(r)


我们的进程在全局的双链表中,但是没有在CPU的运行队列中,我们把这些进程叫做新建状态(就绪状态)。运行状态和就绪状态是在一个队列中的。

操作系统中,task_struct是如何用双链表管理起来的?

但是这样的话,只知道他的内部变量的地址,无法访问变量其他属性?

阻塞状态

先描述,再组织!!!操作系统要对软硬件资源进行管理 -> 包括硬件,对于硬件也是需要先描述,再组织!!!

进程需要哪个外设,就要到对应的外设里面进行等待。

挂起状态(阻塞挂起)

Linux进程状态

  1. S(1):浅度睡眠状态,也叫可中断睡眠。也就是上面的阻塞状态。浅度的意思是因为我们可以ctrl+c直接杀掉这个进程。 -》等键盘

    看一下下面两段代码:

    ①while(1) {printf("hello world\n") 阻塞状态S,频繁的打印,会不断访问外设。

    ②while(1) {} 运行状态R

  2. D(2):深度睡眠状态(磁盘睡眠状态),也叫不可中断睡眠。不对外部任何事件进行相应,OS也杀不掉,除非进程自己醒来,重启都没有!!!磁盘级访问。 -》等磁盘

    浅度睡眠和深度睡眠状态统称为阻塞状态。

  3. T(4):暂停状态。可以通过发送 SIGSTOP 信号给进程来停⽌(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运⾏。

  4. t(8):因为被追踪,进程因为断点而停下来,gdb调试代码时,r会执行代码,就是gdb会创建一个进程,来跑这个代码,这个进程跑完了就会成为t状态。

  5. X(16):死亡状态,即进程结束了,是进程创建的反过程。进程被创建出来是为了完成任务的,在进程结束的时候,不能立即释放该进程的所有资源,而是要让进程现处于一种"僵尸进程",代码数据释放掉,但是会把task_struct保留(会记录进程退出时的退出信息),这样会方便父进程读取退出码!!!

  6. Z(32):僵尸状态,当进程退出并且⽗进程(使⽤wait()系统调⽤,后⾯讲)没有读取到⼦进程退出的返回代码时就会产⽣僵尸进程。 如果父进程将来不处理,这个僵尸进程会一直存在!!!

僵尸进程的危害:内存泄漏!!!

  1. 进程的退出状态必须被维持下去,因为他要告诉它的⽗进程,你交给我的任务,我办的怎么样了。可⽗进程如果⼀直不读取,那子进程就⼀直处于Z状态。
  2. 维护退出状态本⾝就是要⽤数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说,Z状态⼀直不退出,PCB⼀直都要维护。
  3. 那⼀个父进程创建了很多⼦进程,就是不回收,就会造成内存资源的浪费!因为数据结构对象本⾝就要占⽤内存,想想C中定义⼀个结构体变量(对象),是要在内存的某个位置进⾏开辟空间。

进程=内核数据结构(task_struct)+ 代码和数据,当我们创建进程时,首先创建内核数据结构。

Q:那如果父进程先退出了,怎么办呢?

A:==父进程先退出,子进程就被称为"孤儿进程"。==子进程还在运行的话,会被PPID进程领养

相关推荐
七七七七071 小时前
【计算机网络】深入理解ARP协议:工作原理、报文格式与安全防护
linux·服务器·网络·计算机网络·安全
守城小轩1 小时前
轻量级HTTP&Socks代理GOST: Linux编译安装
运维·网络·网络协议
奋斗的蛋黄3 小时前
网络卡顿运维排查方案:从客户端到服务器的全链路处理
运维·服务器·网络
wanhengidc4 小时前
云手机搬砖 尤弥尔传奇自动化操作
运维·服务器·arm开发·安全·智能手机·自动化
lhxcc_fly5 小时前
Linux网络--8、NAT,代理,网络穿透
linux·服务器·网络·nat
摇滚侠5 小时前
Spring Boot3零基础教程,Spring Boot 应用打包成 exe 可执行文件,笔记91 笔记92 笔记93
linux·spring boot·笔记
wow_DG5 小时前
【运维✨】云服务器公网 IP 迷雾:为什么本机看不到那个地址?
运维·服务器·tcp/ip
yuanManGan5 小时前
走进Linux的世界:初识操作系统(Operator System)
android·linux·运维
i_am_a_div_日积月累_6 小时前
jenkins打包报错
运维·rust·jenkins·jenkins打包报错
GIOTTO情6 小时前
舆情处置的自动化实践:基于Infoseek舆情系统的技术解析与落地指南
运维·自动化·linq