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

Linux进程概念(二)

进程状态

  • 1.阻塞和挂起
  • 2.R运行状态和S睡眠状态
  • 3.T停止状态
  • 4.X死亡状态和Z僵尸状态

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Linux的学习】
📝📝本篇内容:阻塞和挂起;R运行状态和S睡眠状态;T停止状态;X死亡状态和Z僵尸状态
⬆⬆⬆⬆上一篇:Linux进程概念(一)
💖💖作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.阻塞和挂起

为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。
下面的状态在kernel源代码里定义:

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

首先在讲这些之前我们首先要来谈一下两个概念,一个是阻塞,另一个是挂起
阻塞:阻塞就是不被调度,一定是因为当前进程需要等待某种资源就绪,一定是进程pcb结构体需要在某种被OS管理的资源下排队
其实就是当你使用电脑时,会出现卡的现象一样,因为你开的软件太多,CPU调度不过来,因此这个时候进程会在等待CPU的调度。或者在你下载软件的时候,突然没网了,你的进程的pcb就会被放到对应硬件的struct的等待队列中
挂起:当进程阻塞时,内存中的空间非常紧张,操作系统会把阻塞进程的代码和数据放到磁盘中,等进程要再次被CPU处理时,再把代码和数据拿回来

2.R运行状态和S睡眠状态

R运行状态:并不意味着进程一定在运行中,它标明进程要么是在运行中,要么是在运行队列中
S睡眠状态:意味着进程在等待事件完成(也叫作可中断睡眠),本质上也是一种阻塞

在这里插入图片描述
我们先写一个死循环
在这里插入图片描述
我们会发现,他居然是S睡眠状态,按理来说不应该是一个运行状态吗,他不是在死循环吗?
实际上问题在于CPU运行太快了,而我们的显示器太慢了,我们的CPU已经做好准备处理了,而我们的显示器还没有做好准备,因此它会先去显示器的结构体的队列中排队,当显示器准备好,CPU一下子就处理完了。因此我们很难查看到那一瞬间的状态。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当我们修改一下代码,把打印注释掉,再运行,可以发现我们的状态变成R,这是因为这个代码只需要CPU处理,并不需要用到其他硬件。
这里可以了解一下状态就是D磁盘休眠状态

D磁盘休眠状态:有时候也叫不可中断睡眠状态,在这个状态的进程通常会等待IO的结束

这个状态我们并查看不到,因为这个比较特殊,当一个进程需要向磁盘写入东西时,这个时候应该把这个进程的pcb指针放到磁盘结构体的队列中,但是此时内存里又比较紧张,我们的CPU必须要杀除一些后台,来缓解内存,但是假设写入磁盘的东西很重要呢,这样会导致不好的后果。因此我们的D状态就有用了,我们把他状态设置成D状态,这样操作系统也不能杀除掉他。

3.T停止状态

T停止状态:可以通过发送SIGSTOP信号给进程来停止进程,这个被暂停的进程可以通过发送SIGCONT信号来让进程继续运行

在这里插入图片描述
我们使用这个代码来做实验

在这里插入图片描述

kill -19:SlGSTOP

在这里可以使用kill -19来停止我们的进程
在这里插入图片描述

kill -18:SIGCONT

在这里可以使用kill -18使程序继续运行
在这里插入图片描述
但是我们会发现,使用ctrl+c并不能结束进程,因为这里的进程是后台的,而ctrl+c只能杀掉前台的进程,这里要用kill -9,不管前台后台都可以杀掉
在这里插入图片描述
在这里插入图片描述

这里还有一个停止状态,叫做追踪式停止(t)

我们的调试的时候,打完断点后,运行就是一种追踪式停止
在这里插入图片描述

4.X死亡状态和Z僵尸状态

X死亡状态:这个状态只是一个返回状态,你不会在任务列表中看到这个状态
Z僵尸状态:僵尸状态是一个比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程

在这里插入图片描述

在这里插入图片描述

echo $?:可以查看进程退出码

为什么会有退出码这个东西呢
因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于Z状态
在这里插入图片描述
就比如上面这个代码
在这里插入图片描述
可以看到,如果把子进程杀掉,他就会变成僵尸进程,僵尸进程会以终止状态保持在进程表中,并且一直在等待父进程读取退出码
所以说,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程就会进入Z状态

僵尸进程的危害
父进程如果一直不读取,那么子进程就会一直处于Z状态
Z状态一直不退出,PCB一直都要维护
造成内存泄露

🌸🌸进程状态的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

相关文章:

Linux进程概念(二)

进程状态1.阻塞和挂起2.R运行状态和S睡眠状态3.T停止状态4.X死亡状态和Z僵尸状态🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Linux的学习】 📝📝本…...

墨天轮【第二届数据库掌门人论坛】圆满收官 | 含嘉宾精彩观点回顾

2月10日上午,墨天轮【2023春季发布会暨第二届数据库掌门人论坛】盛大开启,本次活动的主题为“新征程,向未来”,共包含2022年度中国数据库颁奖盛典、2022年度行业发展报告发布以及第二届数据库掌门人论坛三项议程。华为云数据库服务…...

Redis之集群搭建

redis的集群模式简介: redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,每个节点都保存数据,节点之间互相连接从而知道整个集群状态。 集群搭建步骤如下 (一台服务器模拟多台服务器) 1.创建6个配置…...

31-Golang中的二维数组

二维数组的使用方式 使用方式一:先声明/定义再赋值 1.语法:var数组名 [大小] [大小]类型2.比如:var arr [2] [3]int,再赋值 package main import ("fmt" )func main() {//定义/声明数组var arr [4][6]int//赋初值arr[1][2] 1ar…...

<<Java开发环境配置>>6-SQLyog安装教程

一.SQLyog简介: SQLyog 是一个快速而简洁的图形化管理MySQL数据库的工具,它能够在任何地点有效地管理你的数据库,由业界著名的Webyog公司出品。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。 二.SQLyog下载: 下载地址…...

MySQL 中的 distinct 和 group by 哪个效率更高

先说大致的结论(完整结论在文末):在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 …...

计算机相关专业毕业论文选题推荐

计算机科学以下是我推荐的20个计算机科学专业的本科论文选题:基于机器学习的推荐算法研究与实现基于区块链技术的数字身份认证方案设计与实现基于深度学习的图像识别技术研究与应用基于虚拟现实技术的教育培训平台设计与实现基于物联网技术的智能家居系统研究与开发…...

网络编程套接字之TCP

文章目录一、TCP流套接字编程ServerSocketSocketTCP长短连接二、TCP回显服务器客户端服务器客户端并发服务器UDP与TCP一、TCP流套接字编程 我们来一起学习一下TCP socket api的使用,这个api与我们之前学习的IO流操作紧密相关,如果对IO流还不太熟悉的&am…...

网络与串口调试工具TCPCOM

TCPCOM,网络与串口二合一调试助手,将网络调试助手与串口调试助手合二为一,绿色软件,简单高效。【软件特色】 1. 支持中英文双语言,自动根据操作系统环境选择系统语言类型; 2. 支持ASCII/Hex发送,发送和接收…...

数据库常用命令

文章目录1. 数据库操作命令1.进入数据库2.查看数据库列表信息3.查看数据库中的数据表信息2.SQL语句命令1. 创建数据表2. 基本查询语句3. SQL排序4. SQL分组统计5. 分页查询6. 多表查询7.自关联查询8.子查询1. 数据库操作命令 1.进入数据库 mysql -uroot -p2.查看数据库列表信…...

PTA复习

函数 6-1 学生类的构造与析构 #include<bits/stdc.h> using namespace std; class Student {int num;string name;char sex; public:Student(int n,string nam,char s):num(n),name(nam),sex(s){cout<<"Constructor called."<<endl;}void display…...

TypeScript 学习之接口

接口&#xff1a;对值所具有的结构进行类型检查&#xff0c;称为“鸭式变型法”或“结构性子类型化” 基本使用 interface LabelledValue {label: string; }function printLabel(labelledObj: LabelledValue) {console.log(labelledObj.label); }let myObj {size: 10, label:…...

原码反码补码

在计算机中&#xff0c;负数都是以补码的形式存放的&#xff0c; 正数的原码、反码、补码完全一致。 原码&#xff1a;指的是正数的二进制或负数的二进制&#xff0c; 负数的二进制&#xff08;原码&#xff09;&#xff0c;其实就是在正数的二进制的最高位前面加一个符号位 1。…...

大数据选股智能推荐系统V1.0-1

很长时间没有发布博客了&#xff0c;这段时间个人确实有点忙。另外一方面在这段时间我也没有闲着。自己研发了一套大数据选股的智能推荐系统。废话不说&#xff0c;我们先来看这套系统&#xff1a;登录页面&#xff1a;&#xff08;技术点&#xff1a;验证码的生成&#xff09;…...

调研生成GIF表情包之路

调研阶段 gifshot.js合成GIF 可以从媒体流、视频或图像创建动画 GIF 的 JavaScript 库。 csdn地址&#xff1a;https://blog.csdn.net/qq_16494241/article/details/125717405 分解GIF图片、合成GIF图片 两步走&#xff1a; 1、分解GIF图片 libgif-js&#xff1a;JavaScrip…...

【RocketMQ】源码详解:生产者启动与消息发送流程

消息发送 生产者启动 入口 : org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#start(boolean) 生产者在调用send()方法发送消息之前,需要调用start进行启动, 生产者启动过程中会启动一些服务和线程 启动过程中会启动MQClientInstance, 这个实例是针对一个项…...

信息安全(一)

思维导图 一、AES加解密 1.概述 1.1 概念 AES&#xff1a; 高级加密标准&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密的区块加密标准。 &#xff08;1&#xff09;替代DES的新一代分组加密算法 &#xff08;2&#xff09;支持三种长度密钥&#x…...

企业多会场视频直播(主会场、分会场直播)实例效果

阿酷TONY 2023-2-16 长沙 活动直播做多会场切换功能&#xff08;主会场、分会场、会场一、会场二、会场三自由切换&#xff09; 企业多会场视频直播&#xff08;主会场、分会场直播&#xff09;实例效果 特点&#xff1a;支持PC端&#xff0c;也支持移动端观看&#xff0c;会…...

线性代数速览(一)行列式

文章目录行列式&#x1f33b; 行列式的定义&#x1f33c; 行列式的性质&#x1f337; 一些定理&#x1f940; 行列式的计算&#x1f33a; 克莱姆法则行列式 行列式的本质&#xff0c;就是一个数值。 &#x1f33b; 行列式的定义 有三种定义&#xff1a;1、按行展开&#xff…...

恭喜山东翰林“智慧园区管理系统”获易知微可视化设计大赛二等奖

数字化经济发展是全球经济发展的重中之重&#xff0c;“数字孪生&#xff08;Digital Twin&#xff09;”这一词汇正在成为学术界和产业界的一个热点。数字孪生作为近年来的新兴技术&#xff0c;其与国民经济各产业融合不断深化&#xff0c;推动着各大产业数字化、网络化、智能…...

League Akari:终极英雄联盟自动化工具集——提升90%游戏效率的完整指南

League Akari&#xff1a;终极英雄联盟自动化工具集——提升90%游戏效率的完整指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...

Spring Boot 3.0 + Vue 3 实战:手把手教你搭建图书管理系统(附完整源码)

Spring Boot 3.0 Vue 3 全栈实战&#xff1a;现代化图书管理系统开发指南 在当今快速发展的互联网时代&#xff0c;掌握前后端分离开发技术已成为中级开发者必备的核心竞争力。本文将带你从零开始&#xff0c;使用Spring Boot 3.0和Vue 3这两个当下最热门的技术栈&#xff0c;…...

物联网水产养殖监控系统:智能联动,实现养殖设备自动调控

一、应用背景 水产养殖是我国农业经济的重要组成部分&#xff0c;传统养殖模式长期依赖人工巡检、经验判断&#xff0c;存在诸多难以破解的行业痛点&#xff0c;严重制约养殖效益与产业可持续发展。随着物联网、大数据、边缘计算、无线通信技术的成熟&#xff0c;搭建智能化、数…...

Android开发避坑指南:registerForActivityResult找不到?可能是依赖版本惹的祸

Android开发实战&#xff1a;全面解析registerForActivityResult的正确使用与版本适配 在Android应用开发中&#xff0c;Activity之间的数据传递一直是核心功能之一。随着Jetpack组件的不断演进&#xff0c;Google推出了registerForActivityResult这一现代化API来替代传统的sta…...

三步打造你的专属阅读空间:开源阅读鸿蒙版深度体验

三步打造你的专属阅读空间&#xff1a;开源阅读鸿蒙版深度体验 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 还在为广告弹窗打断阅读体验而烦恼吗&#xff1f;还在为找不到心仪内容而四处奔波吗&am…...

热门 PyPI 包 LiteLLM 遭投毒,窃取凭据和认证令牌

聚焦源代码安全&#xff0c;网罗国内外最新资讯&#xff01; 编译&#xff1a;代码卫士专栏供应链安全数字化时代&#xff0c;软件无处不在。软件如同社会中的“虚拟人”&#xff0c;已经成为支撑社会正常运转的最基本元素之一&#xff0c;软件的安全性问题也正在成为当今社会的…...

抖音视频批量下载:从零掌握双版本工具的完整实战指南

抖音视频批量下载&#xff1a;从零掌握双版本工具的完整实战指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在短视频内容日益丰富的今天&#xff0c;如何高效批量下载抖音视频成为许多内容创作者和研究…...

Llama-3.2V-11B-cot部署详解:自动修复视觉权重加载致命Bug全过程

Llama-3.2V-11B-cot部署详解&#xff1a;自动修复视觉权重加载致命Bug全过程 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具&#xff0c;专为双卡RTX 4090环境深度优化。本工具通过自动修复视觉权重加载等核心Bug&#…...

2025新算法TOC优化VMD实战:六种熵值评估信号分解,一键Matlab出图

1. 为什么需要优化VMD参数&#xff1f; 第一次接触VMD&#xff08;Variational Mode Decomposition&#xff09;时&#xff0c;我和很多初学者一样被它的参数调优问题困扰。记得当时处理一组轴承振动信号&#xff0c;手动试了十几组K值和α值&#xff0c;结果要么模态分解不彻底…...

高效掌握Mermaid CLI:命令行图表工具自动化与高效渲染实战指南

高效掌握Mermaid CLI&#xff1a;命令行图表工具自动化与高效渲染实战指南 【免费下载链接】mermaid-cli Command line tool for the Mermaid library 项目地址: https://gitcode.com/gh_mirrors/me/mermaid-cli 在技术文档创作和软件开发过程中&#xff0c;如何快速将文…...