【Linux操作系统】进程状态(1)

news2024/11/27 7:35:59
图片名称
🎉博主首页: 有趣的中国人

🎉专栏首页: Linux

🎉其它专栏: C++初阶 | C++进阶 | 初阶数据结构

在这里插入图片描述

小伙伴们大家好,本片文章将会讲解 Linux操作系统 进程状态 的相关内容。


如果看到最后您觉得这篇文章写得不错,有所收获,麻烦点赞👍、收藏🌟、留下评论📝。您的支持是我最大的动力,让我们一起努力,共同成长!

文章目录

  • `1. 进程状态介绍`
    • ==<font color = blue><b>🎧1.1 进程状态介绍🎧==
    • ==<font color = blue><b>🎧1.2 Linux OS 中的相关进程状态🎧==
    • ==<font color = blue><b>🎧1.2 Linux OS 进程状态示意图🎧==
  • `2. 详解 Linux OS 的进程状态`
    • ==<font color = blue><b>🎧2.1 S 状态 与 R 状态🎧==
    • ==<font color = blue><b>🎧2.2 T 状态🎧==
    • ==<font color = blue><b>🎧2.3 D 状态🎧==



1. 进程状态介绍


🎧1.1 进程状态介绍🎧


进程的状态指的是 操作系统对进程当前所处的情况或条件的描述。在操作系统中,进程可以处于不同的状态,这些状态反映了进程在其生命周期中的不同阶段或活动。

🎧1.2 Linux OS 中的相关进程状态🎧


/*
* 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 */
};


Linux OS 进程状态的相关解释:

  1. R 运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  2. S 睡眠状态(sleeping):意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
  3. D 磁盘休眠状态(Disk sleep):有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
  4. T 停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
  5. X 死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

🎧1.2 Linux OS 进程状态示意图🎧


在这里插入图片描述



2. 详解 Linux OS 的进程状态


🎧2.1 S 状态 与 R 状态🎧


C语言生成的可执行文件以及Linux相关的指令都是进程。在Linux系统中,任何可执行的程序都是以进程的形式在运行。当你在终端上输入一个命令时,例如ls(列出当前目录的文件),操作系统会创建一个新的进程来执行该命令。 同样,当你运行一个由C语言编写的可执行文件时,也会创建一个新的进程来执行该程序。


先看一下如下代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main()
{
    while (1)
    {
        printf("I am a process,pid = %d\n",getpid());
    }
    return 0;
}

采用 gcc 生成可执行文件:
gcc -o testStatus testStatus.c

生成可执行文件示意图:

在这里插入图片描述

运行 testStatus 并用以下脚本代码查看进程:

while :; do ps ajx | head -1 && ps ajx | grep testStatus | grep -v grep; sleep 1; done 

查看进程状态示意图:

在这里插入图片描述

为什么这里会是 S 状态而不是 R 状态呢?

  1. 当我们在终端输入./testStatus的时候,操作系统会生成一个task_struct的结构体,并将代码和数据加载到内存中;
  2. 由于此代码中有printf()函数,需要访问外设;
  3. 在这个过程中,CPU不断将内存中的代码和数据放到寄存器中进行处理,处理完成之后再放回内存(冯诺依曼体系);
  4. 然而由于显示器的速度是非常慢的,因此CPU在等待显示器响应的时候可能会处于空闲状态,等待显示器资源的释放;
  5. 因此当CPU在等待外设资源的时候,Linux系统中的进程状态会被标记为“休眠”状态。

S 状态是可以被中断的:

通常情况下 S 状态是可以被kill指令终结的,所以 S 状态又叫可中断休眠状态。


kill 指令终结 S 状态示意图:

在这里插入图片描述


🎧2.2 T 状态🎧


T 状态表示一个进程被暂停执行, 通常是由父进程直接发起的暂停操作。例如 debug 状态下打断点调试代码就是常见的 T 状态。


生成debug文件:

[dsj@iZf8z7jm5hhjctr4l8jdkoZ lesson13.2]$ gcc -o testStatus.debug testStatus.c -g

用gdb进行调试:

[dsj@iZf8z7jm5hhjctr4l8jdkoZ lesson13.2]$ gdb testStatus.debug

打断点并运行:

(gdb) b 5
Breakpoint 1 at 0x4004f1: file testStatus.c, line 5.
(gdb) r
Starting program: /home/dsj/linux-coding/lesson13.2/testStatus.debug 

用以下脚本代码查看进程:

while :; do ps ajx | head -1 && ps ajx | grep testStatus | grep -v grep; sleep 1; done 

查看进程状态示意图:

在这里插入图片描述

也可以用kill指令手动让进程暂停或者继续运行,其中18号是让进程继续,19号是终止进程。

kill -l 查看所有信号:

在这里插入图片描述

🎧2.3 D 状态🎧


在Linux系统中, 当系统内存压力非常大时,操作系统有权利根据一定的策略选择杀死一些进程以释放内存空间,从而维持系统的稳定性和可用性。这种行为通常称为"内存压力控制"或"内存压缩",它是Linux内核中的一个重要特性之一。

但是有些进程正在等待硬盘、网络或其他设备的I/O操作完成,但是这些操作可能需要较长时间才能完成,而且在这期间进程无法被中断。


S 状态和 D 状态的区别:

虽然S状态和D状态都表示进程在等待外部事件发生,但它们之间的主要区别在于进程等待事件的特性以及操作系统对其的处理方式。

  1. S状态(休眠状态):
  • S状态表示进程正在等待某个事件发生,这个事件可能是等待I/O操作完成、等待信号量的释放、等待其他进程发送消息等。这种等待可能是可中断的,也就是说,如果进程收到了信号(如SIGKILL)或者等待的事件发生超时,操作系统可以中断等待状态,将进程唤醒并重新调度。
  • 在S状态下,进程通常在等待期间不会消耗系统资源(如CPU),而是被挂起,等待事件发生。
  1. D状态(不可中断的休眠状态,Linux OS 特有的状态):
  • D状态也表示进程在等待外部事件发生,通常是等待磁盘I/O操作完成。但是,D状态下的进程是不可中断的,即使接收到了信号(如SIGKILL),操作系统也无法中断进程的等待状态。这是为了确保在某些情况下系统的稳定性,例如当进程正在等待磁盘I/O操作完成时,需要确保这些操作完成后系统状态的一致性和完整性。
  • 进程处于D状态时,操作系统无法将其释放或终止,直到等待的事件发生并且进程完成相应的操作。

因此,尽管S状态和D状态都涉及等待外部事件发生,但操作系统对待它们的方式不同。S状态下的进程是可中断的,可以在需要时被操作系统释放或重新调度,而D状态下的进程是不可中断的,通常只有在等待的事件发生后才会被操作系统唤醒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1796765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时&#xff0c;AXI4接口包括在内。在该模式下&#xff0c;IP核可以在增强模式下操作&#xff08;未选择启用XIP模式&#xff09;或XIP模式&#xff08;选择启用XIP模式&#xff09;。在性能模式下&#xff0c;AXI4接口用于在DTR和DRR位置的突…

网络编程(UPD和TCP)

//发送数据 //UDP协议发送数据 package com.example.mysocketnet.a02UDPdemo;import java.io.IOException; import java.net.*;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象(快递公司)//…

机器学习-降维算法,PCK,LDA,NMF,LLE

目录 一:数据降维 二:PCA降维算法 1.概念 2.算法原理: 3.降维流程: 4.如何找到方差最大的方向 5.降维公式: 1.协方差和散度矩阵: 2.特征值分解矩阵原理 3.SVD分解矩阵原理 6.PCA算法的两种实现方法: 1.基于特征值分解协方差矩阵实现PCA算法 2. 基于SVD分解协…

面试成功的不二法门:详解Vue3答题章法

前言 面试题在网络上有如海洋之深&#xff0c;对于同一知识点&#xff0c;每个人的理解也各有千秋。我们在面试中常常会遇到一个瞬息间脑海里一片空白的情况&#xff0c;其实这并不是因为我们不懂&#xff0c;而是因为我们在回答的时候缺乏一个清晰的思路。那么问题来了&#x…

服务器远程连接工具有哪些?

【天联】是一款功能强大的服务器远程连接工具&#xff0c;它可以让用户通过网络远程连接到目标服务器&#xff0c;实现远程操作和管理。【天联】的使用场景非常广泛&#xff0c;特别适用于以下几个领域&#xff1a; 零售、收银软件应用的远程管理&#xff1a;【天联】可以结合医…

Ubuntu22.04之解决:terminal使用alt+1/alt+2/alt+3失效问题(二百三十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

我的名字叫大数据: 第7章 我的自拍展

7.1 生活瞬间:通过数据图像呈现 数据健身达人们!在经过一系列的辛勤锻炼后,是时候来看看我的“自拍展”了。通过数据图像,我们不仅可以更直观地了解数据,还能将复杂的信息以简单而美观的方式呈现出来。在这一节中,我将带你领略各种数据图像的魅力,从色彩缤纷的条形图到…

C#之EntityFramework的应用

目录 1&#xff0c;名词概述。 2&#xff0c;实体数据模型EDM介绍。 3&#xff0c;规范函数。 4&#xff0c;查看Linq转换成的SQL语句。 5&#xff0c;数据的增删改查。 5.1&#xff0c;数据查询 5.2&#xff0c;数据插入 5.3&#xff0c;数据更新 5.4&#xff0c;数据…

go语言接口之接口值

概念上讲一个接口的值&#xff0c;接口值&#xff0c;由两个部分组成&#xff0c;一个具体的类型和那个类型的值。它们 被称为接口的动态类型和动态值。对于像Go语言这种静态类型的语言&#xff0c;类型是编译期的概 念&#xff1b;因此一个类型不是一个值。在我们的概念模型中…

MySQL-权限管理(二)

一 host中的含义 /usr/local/mysql/bin/mysql -pLXYlxy2:024.#8u} -S /data/mysql/tmp/mysqld.sock select user,host,authentication_string from mysql.user; %:主要允许从任何主机连接到MySQL服务器&#xff0c;即外部连接localhost: 代表只允许本地主机连接到MySQL服务器&…

spring boot2.7.x遇到问题

validation报错 高版本已移除了validation以来&#xff0c;需手动添加 <dependency><groupId>jakarta.validation</groupId><artifactId>jakarta.validation-api</artifactId> </dependency>mybatis报错 升级版本 <dependency>&…

07-指针的概念与引用,索引

指针的概念与引用&#xff0c;索引 一、内存地址 字节&#xff1a; 定义&#xff1a; 字节&#xff08;byte&#xff09;是内存容量的一个单位&#xff0c;一个字节包含8个位&#xff08;bit&#xff09;。 地址&#xff1a; 定义&#xff1a; 内存地址是系统为了方便区分…

物流装备企业太多,恶性竞争,2024年的新出路在哪里?

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 之前写过一篇文章&#xff0c;关于中国有N多家物流装备企业&#xff0c;从列表中可猜测&#xff0c;行业内竞争惨烈。可以点击查看此篇 中国物流…

当代中国获奖的知名作家信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;作家管理&#xff0c;作品管理&#xff0c;论坛管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xff0c;公告&#x…

上海亚商投顾:微盘股指数大跌超6% 全市场仅500余只个股上涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;创业板指午后一度跌超1%&#xff0c;微盘股指数盘中跌逾7%&#xff0c;小市值个…

HTML+CSS+JS 动态展开式菜单

效果演示 实现了一个可展开菜单按钮的效果,点击按钮会弹出一个菜单列表,菜单列表中包含多个选项。按钮的样式为一个圆形背景,中间有三条横线,表示可以展开。当按钮被点击后,三条横线会变成一个叉号,表示可以收起。菜单列表的样式为一个白色背景,四周有阴影,包含多个选项…

【JavaEE】Spring Boot 日志详解

一 日志概述 日志是用于记录系统运行状态、用户操作和重大事件的工具。 1.日志的用途 系统监控 监控现在几乎是一个成熟系统的标配, 我们可以通过日志记录这个系统的运行状态, 每⼀个方法的响应时间, 响应状态等, 对数据进行分析, 设置不同的规则, 超过阈值时进行报警. 比如统…

数据库资源评估:构建高效数据架构的基础

前言 这篇文章主要是描述在平时开发的过程中怎么进行合理的资源评估&#xff0c;包括数据量预估、用户行为建模、资源预估、资源预览等等。 存储架构设计三步骤 性能估算步骤 用户预估常见方式 用户行为建模 存储性能需求计算 存储性能需求计算案例 案例 用户行为模型:每天使…

【二进制部署k8s-1.29.4】十三、k8s的dashboard安装部署【完结】

文章目录 简介 一.kubernetes-dashboard-7.5.0的安装1.1 查看helm安装的参数1.2 安装命令 二.验证安装结果2.1.验证2.2.配置访问&#xff1a; 三.创建BearerToken来进行登录3.1.创建 ServiceAccount 和 Secret3.2.创建集群绑定3.3.查看token 四.登录注意事项 简介 本章节主要讲…

通过fiftyone按分类下载open-images-v7数据集,并转成yolov5可直接训练的格式

import osimport fiftyone as fo import fiftyone.zoo as foz import yamlclasses [Person, # 人 - 0Car, # 轿车 - 1Taxi, # 出租车 - 2Ambulance, # 救护车 - 3Bus, # 公共汽车 - 4Bicycle, # 自行车 - 5Motorcycle, # 摩托车 - 6Dog, # 狗 - 7Cat, # 猫 - 8M…