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

Linux4.5、进程状态

个人主页:Lei宝啊 

愿所有美好如期而遇


目录

进程状态介绍 

Linux下具体进程状态

R状态 和 S状态

D状态 

T状态

t状态

Z状态

X状态


进程状态介绍 

首先,进程状态有运行,阻塞,挂起,这些只是一个大体的概括,具体的状态我们后面会一一说到。

我们知道,task_struct是Linux进程控制块,实际上我们的进程状态值就定义在里面,在进程状态改变的时候,只需要改变它的值即可。

那么进程状态决定了什么呢?他决定了进程的后续动作,是继续执行,还是终止,如果多个进程都已经就绪,都需要执行,但是我们只有一个CPU,不可能同时执行,于是就有了进程排队,

关于进程排队,参考:进程排队icon-default.png?t=N7T8https://blog.csdn.net/m0_74824254/article/details/134549038?spm=1001.2014.3001.5501

运行状态:不是只有正在CPU上执行的进程才是运行状态,而是只要在CPU运行队列上的进程就处于运行状态。

阻塞状态:程序在等待某种软硬件资源时,就会从运行队列迁移到等待队列,此时就是阻塞状态。

挂起状态:在计算机资源吃紧,也就是运行内存不够时,为了保证操作系统不会挂掉,以及大部分进程仍然能够继续跑下去,会将一些进程的代码和数据先唤出到磁盘上的swap分区,腾出一部分内存空间。

我们这里只提及阻塞挂起。

在一些进程等待某些硬件资源,但是硬件资源没有就绪,计算机资源此时又非常吃紧,如果不及时清理内存空间,就会崩掉,到时候谁也别想运行,那么此时处于阻塞状态的进程就是非常好的清理对象,占着内存空间,然后还不运行,此时操作系统就会将他唤出到磁盘上的swap分区。

当操作系统顶住了这波压力,内存没那么吃紧的时候,我们这个进程的硬件资源也就绪了,task_struct迁移到了运行队列,要被CPU执行时,操作系统就会将他的代码和数据从磁盘上的swap分区上唤入。

我们要提及的是唤出时,进程的task_struct不会被唤出,如果他被唤出,那么谁来记录这个进程的数据,我怎么知道你被唤出了,什么时候唤回来,所以我们的进程在创建时,也是先创建task_struct进程控制块,然后再将他的代码和数据加载进内存。我们说,一个进程要想运行,首先要加载到内存中被操作系统所管理,而要被操作系统所管理,就要先描述,再组织,也就是先创建他的PCB,在将他组织进一个数据结构,我们将来对进程的管理,也就转变成了对这个数据结构的增删查改。

再一个问题,swap分区的大小一般来说和内存大小相同,或者是内存的一半,如果swap分区过大,那么操作系统会依赖这个分区,因为他很大,我们理解成操作系统要将分区填满,所以操作系统一但有阻塞进程,就会把他的代码和数据唤出,或者其他状态下的进程唤出,而相对于CPU和内存交互的速度来说,内存向外设写入代码和数据的速度并不快,这样频繁的唤出,必然会导致整体效率的下降,以及整个操作系统的卡顿。

我们这里只是片面的提及挂起,挂起还有运行挂起等等,同时操作系统在计算机吃紧的时候,不会只去清理进程,还会去清理文件等等其他资源,这里我们只是管中窥豹来了解一下挂起。

所以最后,进程状态的本质,其实就是进程在不同队列的迁移,在运行队列,就是运行状态,在等待队列,就是等待状态,而队列迁移,状态也就改变,status这个变量的值也就改变了。(这里可以参考进程排队)

Linux下具体进程状态

接下来我们会具体说到Linux下进程的状态具体是怎样的

 这是Linux内核的源代码

我们挨个介绍

R状态 和 S状态

R (running) 运行状态

S (Sleeping) 可中断睡眠状态

要说明的是博主开了两个窗口,不是一个窗口执行,为了字体大小方便读者看清,下面的图都是以一个窗口形式展现的,我们将编号,左边是零号窗口,执行和更改代码,右边是一号窗口,用于查看进程,以及杀死进程。

我们发现我们运行的程序处于S状态,(+号一会解释),为什么不是R状态呢?难道是因为进程执行太快了,我们还有sleep休眠1秒所导致的吗?我们去掉sleep。

CPU开始疯狂执行,这行代码开始刷屏,现在进程是什么状态呢 ?

为什么?我们知道printf是个输出函数,要执行他需要访问显式器,显示器是个硬件,访问他必然不会快,而CPU的执行又很快,于是进程到了运行队列,很快执行后,迁移到显示器的等待队列等待响应,这个过程相对于CPU来说就很慢了,于是我们在查询进程时,几乎都是阻塞状态,也就是S。

那么那个+号是什么意思?

这样有+号的进程就是前台进程,执行起来可以中断,输入指令不可执行。

这样执行起来的进程就是后台进程,执行起来不可中断,同时输入指令是可以执行的。 

 

 那我们怎么中断这个进程呢?使用指令kill -9 pid

-9是信号,意为杀死进程。

这个进程就被杀死了。

我们再运行一次查看他的状态,是S,也就是后台进程。

那么我们在删掉printf语句,能不能出现R状态呢?

D状态 

 D (disk sleep) 不可中断进程

这个我们无法演示,但是可以说明,这个状态也叫做磁盘休眠,也就是说一个进程在内存向磁盘写入代码和数据时, 该进程无法被操作系统终止回收,即使计算机资源吃紧,也不可唤出或者杀死。

需要说到的是,如果你的电脑能够查到这个状态,说明你的磁盘已经很满了,操作系统和你的计算机也快玩完了,因为在向磁盘写入数据时,再慢也不是我们能够感知的,同时还被操作系统查到了,说明你的电脑已经很卡顿了,也就快完了。

T状态

什么时候会出现T状态呢?就是进程想要访问某些硬件,但是硬件不允许,但是操作系统又不想杀死或者回收,就会出现这个状态,我们无法演示,但是可以通过信号来让进程暂停。

T (stopped) 暂停状态

 恢复进程

我们kill -9 2472 杀掉进程即可。 

t状态

t (tracing stop) 暂停状态

 我们通过调试来展现这个状态。

 

 

此时我们直接跳到断点处,就是t中断状态。 

Z状态(僵尸进程)

Z (zombie) 僵尸状态

 进程在结束时会将他的task_struct数据返回给父进程,只有父进程读取了这些数据,这个子进程才会结束,如果不读取,就会处于僵尸状态,成为僵尸进程,不会被操作系统释放他的task_struct如果这样的进程很多,那么就会平白占据很多内存空间。

子进程在运行。 

 子进程变成僵尸,因为父进程一直没有结束,没有去读取子进程的数据。

我们平时为什么看不到Z状态呢?因为他们的父进程自动就回收了,计算机的速度很快,不要用我们的感受去衡量计算机的速度。

X状态

X (dead) 从Z状态退出就是X状态

这个不解释。 

孤儿进程

如果父进程结束,但是子进程没有结束,子进程就会成为孤儿进程,被操作系统接管。

可以看到子进程后面被1号进程接管。我们可以查看一下1号进程,就是操作系统

 


相关文章:

Linux4.5、进程状态

个人主页:Lei宝啊 愿所有美好如期而遇 目录 进程状态介绍 Linux下具体进程状态 R状态 和 S状态 D状态 T状态 t状态 Z状态 X状态 进程状态介绍 首先,进程状态有运行,阻塞,挂起,这些只是一个大体的概括&am…...

C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色)

目录 效果 模型信息 mot_ppyoloe_s_36e_ppvehicle.onnx vehicle_attribute_model.onnx 项目 代码 下载 其他 C# Onnx PP-Vehicle 车辆分析(包含:车辆检测,识别车型和车辆颜色) 效果 模型信息 mot_ppyoloe_s_36e_ppvehi…...

OpenGL之Mesa3D编译for Ubuntu20.04(三十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...

ubuntu22.04 arrch64版操作系统编译zlmediakit

脚本 系统没有cmake,需要通过apt先进行下载,下面的脚本已经包含了 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64 cm…...

Course1-Week1:机器学习简介

Course1-Week1:机器学习简介 文章目录 Course1-Week1:机器学习简介1. 课程简介1.1 课程大纲1.2 Optional Lab的使用 (Jupyter Notebooks)1.3 欢迎参加《机器学习》课程 2. 机器学习简介2.1 机器学习定义2.2 有监督学习2.3 无监督学习 3. 线性回归模型3.1…...

这19个JS代码技巧,后悔没有早点看到

在实际工作中,开发者常面临一些需巧妙编程解决的挑战。有时几行代码就能迎刃而解。本文整理了一系列实用代码片段,助您轻松处理URL、DOM操作、事件处理、日期处理以及用户偏好设置等常见问题。 这些精选代码片段均源自“30 seconds of code”——一个卓…...

Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符

注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 iced的基本逻辑是: UI交互产生消息message,message传递给后台的update,在这个函数中编写逻辑,然后通过…...

ros2文件package.xml与cmakelists.txt比较

每次在ros2里面添加文件以后,都要修改packages.xml,与cmakelists.txt文件。...

vue3使用element plus树形选择器懒加载回显失败问题。

vue3使用element plus树形选择器懒加载回显时树形数据还未加载完成,回显时显示的的绑定值,不是要显示的名称。 解决1:不使用懒加载,一次性将数据返回完成 解决2:编辑回显时,拿到要显示的中文强制修改显示…...

Java基于springoot开发的企业招聘求职网站

演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术:springootmysqlvuejsbootstrappoi制作word模板 主要功能:求职者可以注册发布简历,选择简…...

数据结构 / 顺序表 / 顺序表概述和结构体定义

1. 顺序表概述 顺序表:线性表的顺序存储称为顺序表逻辑结构:线性结构(一对一)存储结构:顺序存储(使用一段连续的存储空间存储类型相同的数据元素)顺序表:逻辑相邻,物理也相邻顺序表是借助于数组实现,但是不…...

js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数!

js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数! 函数封装和传参 首先我们,要封装这样一个函数,首先要确定,传入哪些参数。…...

通过内存标记扩展(MTE)提供增强的安全性

目录 一、内存安全BUG导致的安全漏洞 二、检测和修复内存安全漏洞的难点 三、MTE如何应对这一挑战...

深入理解main方法-Java

深入理解main方法-Java 一、语法说明二、特别说明三、动态传值 一、语法说明 public static void main(String[] args)main方法是虚拟机调用的java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是publicjava虚拟机在执行main()方法时不必创建对象&#x…...

C#开发的OpenRA游戏之属性SelectionDecorations(10)

C#开发的OpenRA游戏之属性SelectionDecorations(10) 前面分析了选择属性,继续分析前面的内容,不过这里不再是选择,而是选择相关的属性。 当用玩家选择地图上一个物品,或者士兵,或者坦克时,就会在周边画上一些指示标记,并且有一个状态条。 通过上图,可以看到建筑物周…...

【机器学习】迁移学习

迁移学习:给定一个有标记的源域和一个无标记的目标域。这两个领域的数据分布不同。迁移学习的目的就是要借助源域的知识,来学习目标域的知识(标签)。或是指基于源域数据和目标域数据、源任务和目标任务之间的相似性,利用在源领域中学习到的知…...

ubuntu 安装 jetbrains-toolbox

ubuntu 安装 jetbrains-toolbox 官网下载 jetbrains-toolbox jetbrains 官网 jetbrains 官网:https://www.jetbrains.com/ jetbrains-toolbox 官网下载页面 在下载页面点击 Download 安装 jetbrains-toolbox 解压 jetbrains-toolbox 安装包 到指定目录 本案例将…...

5.一维数组——输入一行字符,统计其中各个大写字母出现的次数。

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 四、举一反三一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为一维数组编程题,点滴成长,一起逆袭。 一、题目描述 输入一行字符,统计其中各个大写字母出现的…...

FreeImage 编译安装

FreeImage下载: The FreeImage Project 点击第6行: Download FreeImage 3.18.0 或: wget http://downloads.sourceforge.net/freeimage/FreeImage3170.zip #解压 unzip FreeImage3170.zip -d freeImage 编译FreeImage源代码可能需要遵循…...

编程开发的 词汇

函数命名相关词汇: Strategy 策略 concrete 具体的 Context 上下文 execute 执行 handler 操作者 target 代理对象 proxy 代理 request 请求 iterator 迭代器 handle 方法处理 notify 通知 update 更新 remove 移除,清除 reset 重置 com…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...