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

【进程与线程】进程的状态

在操作系统中,进程是执行中的程序实例。进程在其生命周期中会经历不同的状态,操作系统根据进程的执行情况和资源调度,将进程划分为多个状态。 这些状态帮助操作系统更加高效地管理 CPU 和系统资源。

进程的状态:就绪态,运行态,阻塞态,暂停态,僵尸态,死亡态。
请添加图片描述

1. 就绪态(Ready)

进程已准备好运行,但由于 CPU 正忙,暂时无法获得 CPU 执行权。

此时进程已获得所有必要的资源(如内存、I/O 等),只需等待 CPU 调度。
多个进程可能同时处于就绪状态,操作系统会将它们放入 就绪队列 中,按照调度算法(如时间片轮转、优先级调度)分配 CPU。

转换条件
  • 创建态 转入(进程被创建后,获得所需资源)。
  • 运行态 转入(时间片用尽,重新进入就绪队列等待调度)。

2. 运行态(Running)

进程正在 CPU 上执行,属于唯一占用 CPU 的状态。

在单核 CPU 系统中,任意时刻只有一个进程处于运行态。
在多核 CPU 系统中,每个核心上可以有一个进程处于运行态。

转换条件
  • 就绪态 转入(进程被调度器分配到 CPU)。
  • 转换到其他状态:
    • 阻塞态:进程执行过程中需要等待某些资源(如 I/O 请求)。
    • 就绪态:时间片用尽,CPU 被剥夺。
    • 死亡态:进程执行完成。

3. 阻塞态(Blocked/Waiting)

进程正在等待某些资源或事件(如 I/O 设备、文件锁、信号)完成,暂时无法继续执行。

阻塞态的进程会停止占用 CPU,释放调度权,直到等待的事件完成。
典型场景:等待磁盘 I/O 完成、等待用户输入、网络数据传输。

转换条件
  • 运行态 转入(进程请求资源未满足)。
  • 转换到 就绪态:等待的资源或事件完成,进程重新进入就绪队列。

4. 暂停态(Stopped/Suspended)

进程被 人为暂停系统挂起,处于暂停执行的状态。

进程不会占用 CPU,不会继续执行,但仍保留所有资源(如内存)。通常由用户或系统发出暂停信号(如 SIGSTOP)导致。暂停态是人为控制的,与阻塞态不同,暂停态不是因为等待资源

转换条件
  • 运行态就绪态 转入(接收到暂停信号)。
  • 转换到其他状态:
    • 就绪态:接收到继续信号(如 SIGCONT)。
    • 死亡态:进程被终止。

Linux 中,使用 Ctrl+Z 将一个前台进程暂停(进入暂停态),可以通过 fgbg 恢复执行。

5. 僵尸态(Zombie)

进程已 完成执行,但其父进程尚未通过系统调用(如 wait())回收它的退出状态,导致进程仍保留在进程表中,成为僵尸进程。

僵尸态的进程已释放大部分资源(如内存),只占用进程表中的一个条目。
僵尸进程无法被直接杀死,只有父进程回收其状态或父进程退出后由 init 进程接管时,僵尸态才会消失。

转换条件
  • 运行态 转入(进程完成执行)。
  • 转换到 死亡态:父进程回收退出状态。

避免僵尸进程:① 父进程应主动调用 wait()waitpid() 获取子进程的退出状态。② 使用信号处理机制自动回收子进程(如 SIGCHLD 信号处理)。

6. 死亡态(Terminated/Exited)

进程已完成执行或被终止,所有资源被系统回收,进程完全退出。

死亡态是进程的最终状态一旦进程进入死亡态,就无法再恢复

转换条件

运行态 转入(正常执行完成);从 其他状态 转入(进程被强制终止,如接收到 SIGKILL 信号)。

综合:进程状态转换图

				   +-----------+| 创建态     |+-----------+|v
+-----------+      +-----------+      +-----------+
| 就绪态     | <--> | 运行态     | ---> | 阻塞态     |	
+-----------+      +-----------+      +-----------+
进程已准备好运行,	  进程正在 CPU 上执行		进程等待某些资源或事件完成,|				暂时无法继续执行。
但等待 CPU 调度。          |                   |v                   |+-----------+              || 暂停态     | <------------++-----------+	进程被人为或系统挂起,暂停执行。|v+-----------+| 僵尸态     | 进程已完成执行,但父进程未回收其退出状态。+-----------+|v+-----------+| 死亡态     | 进程已终止,所有资源被回收。+-----------+

查看进程状态

在 Linux 系统中,可以使用 pstop 查看进程的状态:

ps -eo pid,stat,cmd# STAT 列 表示进程状态:
#   R:运行态(Running)。
#   S:阻塞态(Sleeping)。
#   D:不可中断的阻塞态(如等待 I/O)。
#   T:暂停态(Stopped)。
#   Z:僵尸态(Zombie)。

输出

PID   STAT CMD
1234  R    ./myprogram        # 正在运行
5678  S    sleep 100          # 阻塞等待
9101  T    ./myprogram        # 暂停
1121  Z    [myprogram] <defunct>  # 僵尸进程

综上。进程的状态反映了其生命周期中的不同阶段,操作系统通过这些状态高效地管理进程和资源,理解这些状态及其转换有助于熟悉操作系统调度机制,并在实际开发中避免问题(如僵尸进程)。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

相关文章:

【进程与线程】进程的状态

在操作系统中&#xff0c;进程是执行中的程序实例。进程在其生命周期中会经历不同的状态&#xff0c;操作系统根据进程的执行情况和资源调度&#xff0c;将进程划分为多个状态。 这些状态帮助操作系统更加高效地管理 CPU 和系统资源。 进程的状态&#xff1a;就绪态&#xff0…...

阻塞赋值和非阻塞赋值

理论学习 阻塞赋值 用 表示 &#xff0c;这种对应的电路结构常常与触发器没有关系&#xff0c;只与输入电平的变化有关系。可以将阻塞赋值的操作看作只有一个步骤的操作&#xff0c;即将计算赋值符号的右边赋值给左边&#xff0c;在未执行完之前&#…...

Maven在Win10上的安装教程

诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要&#xff0c;也可以从官网下载&#xff1a; 第一步&#xff1a;解压文件 第二步&#xff1a;设置环境变量 在系统变量处点击新建&#xff0c;输入变量名MAVEN_HOME&#xff0c;变量值为解压路径&#xff1a; 在系统变…...

攻防世界_SQL注入

inget 尝试万能钥匙。 输入?id1or11# supersqli 1.找注入点 输入框 2.判断字符型&#xff0c;数字型 输入1 and 11 和1 and 12&#xff0c;发现两次提交后页面一样&#xff0c;判断出为字符型注入 3.判断闭合符号 输入1&#xff0c;回显正常 输入1&#xff0c;报错 加上…...

Ruby语言的数据结构

Ruby语言的数据结构详解 Ruby是一种动态、面向对象的编程语言&#xff0c;因其简洁优雅的语法而受到开发者的喜爱。在Ruby中&#xff0c;数据结构是构建和管理数据的一种方式&#xff0c;不同的数据结构适用于不同的场景。本文将详细探讨Ruby中的几种主要数据结构&#xff0c;…...

Jmeter配置服务代理器 Proxy(二)

1.创建脚本记录器 2.配置&#xff1a;Jmeter代理、端口、记录目标等 3.配置谷歌浏览器代理 浏览器配置代理的详细教程可参考&#xff1a;使用whistle代理-CSDN博客 4.启动Jmeter记录器 点击ok后弹出这个界面&#xff0c;生成了证书&#xff1a; 5.给浏览器安装Jmeter代理的证书…...

Spring Boot 中实现 WebSocket 的方式

在 Spring Boot 中实现 WebSocket 的方式主要有以下几种,每种方式适用于不同的场景和需求: 1. 基于 Spring WebSocket 的实现 特点: 原生支持 WebSocket,基于 Spring 提供的 API。使用 WebSocketConfigurer 和 WebSocketHandler 配置端点和消息处理逻辑。可以通过拦截器访…...

C语言初阶习题【29】杨氏矩阵

1. 题目描述——杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 2. 思路 3. 代码实现1 #include<stdio.h>void fin…...

[操作系统] 深入理解操作系统的概念及定位

概念 任何计算机系统都包含⼀个基本的程序集合&#xff0c;称为操作系统(OS)。 其核心功能如图片所示&#xff0c;包括&#xff1a; 内核 (Kernel)&#xff1a; 内核是操作系统的核心部分&#xff0c;被认为是狭义上的操作系统&#xff0c;直接与硬件打交道。负责进程管理、内…...

Java中对list数据进行手动分页(可直接复用版)

1.获取list列表数据 // 这边用的mybatisplus查询的sql。条件自己组装 List<实体类> result baseMapper.getPageData(lambdaQuery); 2.计算总记录数 // 计算总记录数 int totalRecords result.size(); 3.创建分页对象&#xff0c;并塞入结果值 // 创建分页对象 IPa…...

【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页

【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页 一、问题背景&#xff1a; 如今&#xff0c;大家都离不开各种手机应用。随着鸿蒙系统用户越来越多&#xff0c;大家都希望能在鸿蒙设备上快速找到想用的 APP。华为应用市场里有海量的 APP&#xff0c;但之前从鸿蒙设备进…...

《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析

全星研发管理 APQP 软件系统在汽车电子行业的应用收益分析 在汽车电子行业&#xff0c;技术革新迅猛&#xff0c;市场竞争激烈。《全星研发管理 APQP 软件系统》的应用&#xff0c;为企业带来了革命性的变化&#xff0c;诸多收益使其成为行业发展的关键驱动力。 《全星研发管理…...

【IDEA 2024】学习笔记--文件选项卡

在我们项目的开发过程中&#xff0c;由于项目涉及的类过多&#xff0c;以至于我们会打开很多的窗口。使用IDEA默认的配置&#xff0c;个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…...

Android SystemUI——服务启动流程(二)

在 Andorid 系统源码中,package/apps下放的是系统内置的一些 APP,例如 Settings、Camera、Phone、Message 等等。而在 framework/base/package 下,它们也是系统的 APP,SystemUI 就在此目录下。它控制着整个 Android 系统的界面,但其实他也是一个 APP,不同于一般的 APP,它…...

iOS - 内存对齐

1. 基本的内存对齐 // 对象内存对齐 struct objc_object {// isa 指针 8 字节对齐isa_t isa __attribute__((aligned(8))); };// 定义对齐常量 #define WORD_MASK 7UL // 字对齐掩码 #define WORD_SHIFT 3UL // 字对齐位移 #define WORD_SIZE 8 …...

小游戏前端地区获取

目前前端获取除了太平洋&#xff0c;没有其它的了。 //在JS中都是使用的UTF-8&#xff0c;然而requst请求后显示GBK却是乱码&#xff0c;对传入的GBK字符串&#xff0c;要用数据流接收&#xff0c;responseType: "arraybuffer" tt.request({url: "https://whoi…...

AIGC时代:如何快速搞定Spring Boot+Vue全栈开发

文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容&#xff08;AIGC&#xff09;技术的迅速发展&#xff0c;…...

MDX语言的多线程编程

MDX语言的多线程编程 引言 多线程编程是一种重要的编程技术&#xff0c;广泛用于提高程序的运行效率和响应速度。随着计算机硬件的发展&#xff0c;多核处理器的普及&#xff0c;多线程编程显得尤为重要。MDX&#xff08;Multi-dimensional Expressions&#xff09;语言作为一…...

Vue.js组件开发-实现输入框与筛选逻辑

在Vue.js组件开发中&#xff0c;实现输入框与筛选逻辑通常涉及创建一个输入框组件&#xff0c;让用户能够输入搜索关键字&#xff0c;并根据这些关键字过滤一个数据列表。 步骤 ‌准备数据‌&#xff1a; 在Vue组件中&#xff0c;准备一个数据列表&#xff08;通常是一个数组…...

配置Allure环境变量【macOS版】

1. 进入github官网&#xff0c;搜索allure 点击进入&#xff0c;下滑找到Download栏目&#xff0c;点击release 2. 下载安装包并解压 我下载的是zip&#xff0c;解压至存放目录&#xff0c;复制该目录。&#xff08;一会配置环境变量用&#xff09; 3. 编辑.zsrch文件&…...

AndroidStudio升级到2024.2.2项目AGP升级8.8.0版本记录

背景 升级as&#xff0c;一般会把agp一起升级。我的原来版本是8.7.2 plugins {id com.android.application version 8.7.2 apply falseid com.android.library version 8.7.2 apply falseid org.jetbrains.kotlin.android version 1.8.10 apply false }升级后版本&#xff1a…...

Require:利用MySQL binlog实现闪回操作

1&#xff0c;闪回原理 【binlog】MySQL binlog以event的形式&#xff0c;记录了MySQL server从启用binlog以来所有的变更信息&#xff0c;能够帮助重现这之间的所有变化。MySQL引入binlog主要有两个目的&#xff1a;一是为了主从复制&#xff1b;二是某些备份还原操作后需要重…...

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…...

UE5游戏性能优化指南

UE游戏性能和场景优化思路&#xff1a; 1. 可以把可延展性调低&#xff0c;帧率会大幅提高&#xff0c;但画质会大幅降低 2.调整固定灯光&#xff0c;静态光源&#xff0c;烘焙构建光照&#xff0c;灯光重叠距离&#xff0c;关闭阴影 3.设置模型和地形LOD 4.开启Nanite&…...

Gitlab Runner安装与配置

由于格式和图片解析问题&#xff0c;为了更好阅读体验可前往 阅读原文 本篇使用Docker安装Gitlab runner进行runner的安装和注册&#xff0c;其他方式请参考官方文档非Docker安装Gitlab runner 请确保runner版本和gitlab版本兼容以及docker相关版本兼容问题 下载镜像 docker p…...

如何有效防止和解决IP劫持问题

一、什么是IP劫持&#xff1f; IP劫持是一种攻击方式&#xff0c;攻击者通过伪装成合法的IP地址欺骗网络系统&#xff0c;从而非法获取数据或中断服务。这种攻击可以导致数据泄露、服务不可用等多种严重后果。 二、防范措施 启用SSL/TLS加密 SSL/TLS协议可以在客户端和服务器…...

2006-2020年各省人均水资源量数据

2006-2020年各省人均水资源量数据 1、时间&#xff1a;2006-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、人均水资源量 4、范围&#xff1a;31省 5、指标解释&#xff1a;人均水资源量是指一个国家或地区在一定时期…...

C++基础入门(二)

目录 前言 一、重载 1.函数重载 2.运算符重载 二、构造函数 1.什么是构造函数 2.带参数的构造函数 3.使用初始化列表 4.this关键字 5.new关键字 三、析构函数 1.什么是析构函数 四、静态成员变量 1.静态成员的定义 2.静态成员变量的作用 五、继承 1.继承基本概…...

互联网架构困境:网络与信息安全

当我们说 TCP/IP 没有内置安全属性时&#xff0c;这到底是什么意思&#xff1f;事实上仔细观察身边的世界&#xff0c;很少有内置安全属性的&#xff0c;这源自于石器时代的野人们没有粮仓需要保护。 “互联网前身 ARPAnet 最初来自于美国国防部对等通信需求”&#xff0c;即使…...

HIVE技术

本文章基于黑马免费资料编写。 hive介绍 简介 hive架构 hive需要启动的配置 执行元数据库初始化命令 使用hive必须启动的服务 ./schematool -initSchema -dbType mysql -verbos启动 Hive 创建一个 hive 的日志文件夹 mkdir /export/server/hive/logs启动元数据管理服务 n…...

北京建设企业协会网站/新开店铺怎么做推广

Description ​ 很少人知道其实奶牛非常喜欢到洞穴里面去探险。 ​ 洞窟里有N(1≤N≤100)个洞室&#xff0c;由M(1≤M≤1000)条双向通道连接着它们&#xff0e;每对洞室间 至多只有一条双向通道&#xff0e;有K(1≤K≤14)个洞室&#xff0c;里面放有1捆干草&#xff0e;牛吃1捆…...

山东网站备案注销申请表/优化设计四年级上册语文答案

1、SDK&#xff1a;Software Development Kit&#xff0c;软件开发包 GUI&#xff1a;Graphical User Interface&#xff0c;图形用户接口 GDI&#xff1a;Graphical Derice Interface&#xff0c;图形设备接口 2、句柄用来标识各种资源和对象。 HANDLE&#xff1a;句柄 HWND&…...

网站优化推广平台/最新做做网站

用android studio编写2-4个数的简易四则运算&#xff0c;首先新建一个安卓工程&#xff0c;进行页面布局 代码如下&#xff1a; JAVA代码&#xff1a; 运行结果展示&#xff1a; 这个程序进行除法预算时显示不出小数点&#xff0c;并且实现运算的方法过于繁琐…...

购物网站建设费用/长春百度快速优化

我的邀请链接&#xff0c;请从以下位置注册:http://www.kuaipan.cn/index.php?acaccount&opregister&channelb58vj0 这样可以给我增加积分&#xff0c;也可以让你的初始容量从5G直接升到6G &#xff0c;感谢。 金山快盘&#xff08;T盘&#xff09;是什么&#xff1a;…...

邢台移动网站建设价格/百度在线下载

malloc和freemallocfreefree的作用malloc 指在堆区开辟空间给用户使用&#xff0c;而这个区域最大是取决于内存大小 free free(void* p)的参数只有一个&#xff0c;把用malloc开辟的空间销毁掉&#xff0c;而free仅仅传入的是一个首地址&#xff0c;那么free是怎么确定mallo…...

怎样做影视网站/站长论坛

一前言 本来使用qq邮箱发送邮件&#xff0c;然后借助sendEmail来发送邮件告警&#xff0c;但是有每天的200封限制&#xff0c;很是不爽&#xff0c;于是想到来自己搭建邮件服务器来解决这个问题&#xff0c;关于使用sendEmail来借助qq邮箱来发送邮件详见http://www.cnblogs.com…...