东莞做网站要多少钱/百度有哪些app产品
✨个人主页: Yohifo
🎉所属专栏: Linux学习之旅
🎊每篇一句: 图片来源
🎃操作环境: CentOS 7.6 阿里云远程服务器
Perseverance is not a long race; it is many short races one after another.
- 毅力不是一场漫长的比赛;是许多短跑一个接一个。
文章目录
- 📘前言
- 📘正文
- 📖阻塞
- 📖挂起
- 📖进程状态
- 🖋️运行 R
- 🖋️睡眠 S
- 🖋️休眠 D
- 🖋️暂停 T
- 🖋️死亡 X
- 🖋️僵尸 Z
- 📘总结
📘前言
进程
只有被OS管理好了,才能发挥它的全部功效,而系统中存在多个 进程
,OS无法做到面面俱到,因此为了更好的管理进程
,OS把 进程
分成了几种状态:阻塞、挂起、运行、休眠等等,至于每种状态的应用场景是什么、有什么用?本文将会带着大家认识的各种 进程
状态
📘正文
在谈 进程状态
之前,首先要回顾下之前的 进程
相关知识
- OS管理的本质是先描述,再组织
- OS并非直接管理
进程
,而是管理进程
的PCB(task_struct)
PCB
中有着进程的各种信息,包括:PID
、PPID
、进程状态
等- 我们可以通过函数
getpid()
获取当前进程的PID
进程
间存在父子关系,可以通过fork()
主动创建子进程
父子进程
相互独立,共享一份代码时,具有写时拷贝
机制
📖阻塞
何为阻塞?
阻塞
就是进程
因等待某种条件就绪,而导致的一种不推进状态- 通俗来说,
阻塞
就是进程
卡住了,原因就是缺少资源
比如在我们日常生活中,常常发生堵车,原因就是道路资源不够用了,车辆这个 进程
就需要原地等待
那么进程
需要什么资源呢?
- 比如
磁盘
、网卡
、显卡
等各种外设 - 假设你现在想在
steam
上下载游戏,当你点击下载按钮后提示磁盘空间不足,此时是无法运行steam下载
这个进程的,因为此进程
需要等待足够大的磁盘资源
- 此时我们就称此
进程
为阻塞
状态
总结
- 进程阻塞就是不被调度
原因
- 进程的 task_struct 结构体需要在某种被 OS 管理的资源下排队
📖挂起
理解 进程阻塞
后,理解 进程挂起
就比较轻松了
挂起(阻塞挂起)
- 当
CPU
资源紧张时,将进程
交换至磁盘
中挂起,此时内存中只有PCB
挂起可以看作一种特殊的阻塞状态
比如在我们生活中,一边走路一边玩手机很危险,所以此时我们会将玩手机这个 进程挂起
,即把手机揣进兜里,然后 专心执行走路这个 进程
📖进程状态
进程
有各种运行状态,方便OS进行管理,在 Windows
中,进程
状态是这样的
而在我们 Linux
中,新建
、就绪
、运行
都可以看作 运行 R
这一个状态,所以比较清晰
而我们今天要学习的正是 Linux
中的 进程
状态
进程是何种状态,取决于此进程的PCB在哪里排队
🖋️运行 R
首先来看看第一种状态 R
以我们以往的认知来说,一个程序在运行就表示该 进程
处于 运行
状态,那么事实真的如此吗?
先来看看下面这段代码:
#include<iostream>
using namespace std;#include<unistd.h>
#include<sys/types.h>int main()
{while(1){cout << "I'm a process, my PID is:" << getpid() << endl;sleep(1);}return 0;
}
当前 Makefile
文件为
myProcess:test.cppg++ -o myProcess test.cpp.PHONY:catPI
catPI:ps ajx | head -1 && ps ajx | grep myProcess | grep -v grep .PHONY:clean
clean:rm -r myProcess
通过 make catPI
指令调用 Makefile
中提前设定好的指令,查看当前进程信息
可以看到当前的进程状态为 睡眠 S+
注: +
表示当前进程在前台运行中
进程
难道没有运行吗?
- 运行了,但我们
很难捕捉到
- 对于 CPU 来说,将这么简单的一句话输出到屏幕上是一件很小的事,可能几毫秒就完成了
- 而其他大多数时间,
进程
都在外设等待队列中排队
- 当我们将打印语句和睡眠语句屏蔽后,
进程
不用在等待队列中排队
, CPU 就一直在处理死循环,此时可以观察到运行 R
状态
此时进程 myProcess
就在运行中
注意: R
表示此时 进程
已经在 运行队列
中排队了,但 进程
不一定在 CPU 上运行
🖋️睡眠 S
睡眠 S
的本质就是 进程阻塞
,表示此时进程因等待某种资源而暂停运行;睡眠 S
又称为可中断休眠,当 进程
等待时间过长时,我们可以手动将其关闭,应用卡死后强制关闭也是这个道理
还有一种方式终止进程:kill
kill -9 PID
终止进程,当进程在后台运行时(状态不加+
),我们是无法通过ctrl+c
终止的,但kill
指令可以终止
🖋️休眠 D
还存在一种特殊睡眠状态 休眠 D
,休眠
又被称为不可中断休眠,顾名思义,休眠 D
状态下的 进程
是无法终止的,kill
指令和 OS都无能为力,只能默默等待 进程阻塞
结束,拿到资源了,进程
才会停止 休眠 D
状态
终止 休眠 D
进程的一个方法就是切断电源,此时进程是结束了,但整个系统也结束了
倘若存在 休眠 D 进程长时间运行,那么此时就表示系统离宕机不远了
不可休眠状态比较少见,一般出现于IO阻塞
用途:
- 使操作系统无法杀死该
进程
,预防误杀现象
🖋️暂停 T
我们还可以使 进程
进入 暂停 T
状态
kill -19 PID
暂停进程kill -18 PID
恢复进程
我们可以通过 kill -18 PID
使 进程
恢复运行,恢复后的 进程
在后台运行
注意: 进程
在后台运行时,是无法通过 ctrl+c
指令终止的,只能通过 kill -9 PID
终止
在 gdb
中调试代码时,打断点实际上就是 使 进程
在指定行暂停运行,此时 进程
处于 追踪暂停状态 t
🖋️死亡 X
当进程被终止后,就处于 死亡 X
状态
死亡状态是无法在任务列表中观察到的,死亡 X
状态只是一个返回状态
🖋️僵尸 Z
与死亡状态相对应的还有一个 僵尸 T
状态
- 通俗来说,
僵尸状态
是给父进程
准备的 - 当
子进程
被终止后,会先维持一个僵尸
状态,方便父进程
来读取到子进程
的退出结果,然后再将子进程
回收 - 单纯的在
bash
环境下终止子进程
,是观察不到僵尸状态
的,因为bash
会执行回收机制,将僵尸
回收 - 我们可以利用
fork()
函数自己创建父子进程
关系,观察到这一现象
#include<iostream>
using namespace std;#include<unistd.h>
#include<sys/types.h>int main()
{pid_t ret = fork();if(ret == 0){while(1){cout << "I'm son process, my PID: " << getpid() << " PPID: " << getppid() << endl;sleep(1);}}else if(ret > 0){while(1){cout << "I'm father process, my PID: " << getpid() << " PPID: " << getppid() << endl;sleep(1);}}else{while(1){cout << "Make son process fail!" << endl;sleep(1);}}return 0;
}
此时输入指令 kill -9 PID
即 kill -9 28315
终止 子进程
再次查看进程状态:
僵尸进程如果不被回收,会导致内存泄漏问题和标识符占用问题
关于 僵尸进程
的更多信息,将会在下篇文章中介绍
📘总结
以上就是关于进程学习【二】的全部内容了,我们简单学习了 进程
的相关状态,知道了何为 阻塞
、进程
为什么 阻塞
的缘由,同时还见识了 进程
的各种状态,为以后 进程
进一步学习和控制打下了基础
如果你觉得本文写的还不错的话,期待留下一个小小的赞👍,你的支持是我分享的最大动力!
如果本文有不足或错误的地方,随时欢迎指出,我会在第一时间改正
…
相关文章推荐
Linux进程学习【一】
Linux工具学习之【gdb】
Linux工具学习之【git】
Linux工具学习之【gcc/g++】
Linux工具学习之【vim】
Linux 权限理解和学习
![]()
相关文章:

Linux进程学习【二】
✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…...

我问chatGPT,在JavaScript中构造函数和类的区别
问:构造器函数和面向中的类是同样的东西吗|? 答:构造器函数和面向对象中的类并不是同样的东西,它们之间有些许不同。 在面向对象编程中,类是一种抽象的概念,它描述了一类具有相同属性和行为的对象。类可以…...

软考高级-信息系统管理师之沟通管理(最新版)
项目沟通管理 1、项目沟通管理基础项目沟通管理的重要性项目沟通管理相关理论2、规划沟通管理3、管理沟通4、控制沟通项目沟通管理的技术和工具1、项目沟通管理基础 项目沟通管理的重要性 1、与1T项目成功有关的最重要的四个因素是:主管层的支持、用户参与、有经验的项目经理…...

PyQt5 自定义富文本编辑器
介绍 一款使用PyQt5和网页端框架wangEditor集成的富文本编辑器 代码片段 PyQt5客户端 与网页端建立连接def create_connect(self):self.web_view QWebEngineView()self.bridge JSBridge(self.web_view.page())self.web_view.load(QUrl.fromLocalFile(self.editor_path))w…...

【高可用系统架构设计】SLA服务可用性4个9是什么意思?如何保证服务的高可用性 HA(High Availability)?...
如何保证服务的高可用性 HA(High Availability)?高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。方法论上,高可用是通…...

微服务架构设计模式-(14)面向生产环境
生产环境要求 应用安全 数据权限 服务可配置性 不同环境的配置不一样,不能写死代码,所以要配置 可观测性 需要日志系统 应用安全 四个方面 身份验证 验证主体的身份解决方案 单体 cookie 微服务中 API Gateway 访问令牌 不透明令牌透明令牌ÿ…...

HTML5新增用法
新增语义化标签 并无特殊含义,是语义!语义!语义! <header> 头部区域 <nav> 导航区域 <main> 主体区域 <article> 内部标签 <section> 块级标签 <aside> 侧边栏标签 <footer> 尾部…...

富足金字塔:人的努力是为了扩大选择的范围
人的努力是为了扩大选择的范围,这是熵减的另一种表述。富足金字塔代表着人生的三重境界。第一层是温饱。人需要食物、水、住所。第二层是品质。能源、ICT、教育带来更有品质的生活,如智能门锁、智能马桶、扫地机、洗碗机、洗衣烘衣机。第三层是梦想。包括…...

C++类基础(十七)
类的继承——补充知识 ● public 与 private 继承(C Public, Protected and Private Inheritance) 改变了类所继承的成员的访问权限 //公有继承 struct Base { public:int x; private:int y; protected:int z; }; struct Derive : public Base //公有继承…...

LeetCode刷题复盘笔记—一文搞懂贪心算法之56. 合并区间(贪心算法系列第十四篇)
今日主要总结一下可以使用贪心算法解决的一道题目,56. 合并区间 题目:56. 合并区间 Leetcode题目地址 题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间…...

Andriod入门级开发
这学期有个课设,我们组我负责一个手机APP的开发,虽然刚开始说要实现什么智能导航,类似高德地图那种,但最后阉割的只剩一个Socket通信了,因为之前没有接触过(可能之后也不会再接触),记…...

DCL 数据控制语言
1、简介 DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。 2、管理用户 2.1 查询用户 select * from mysql.user;查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅代表只能够在当前本机访问…...

全网超详细的下载与安装VMware虚拟机以及为什么要安装VMware虚拟机
文章目录1. 文章引言2. 下载VMware3. 安装VMware1. 文章引言 我们使用最多的系统是windows系统,因为,国内电脑厂商的操作系统(os)基本是windows系统,比如华为、联想、华硕等电脑。 但线上的服务器大多是Linux系统,而我们经常使用…...

Python获取zabbix问题触发器
背景:阿里云的ECS服务器因为阿里云升级插件,导致安全防护程序重启,产生不同的端口。导致低自动发现注册的端口 大量报警。 解决:杀掉关于因为非业务 变更的端口检测的触发器。 相关文档: Zabbix监控之主机端口监控自…...

原型链污染
目录 前置知识 原型对象 prototype和__proto__的区别 原型链概念 原型链的继承 原型 链污染 原型链污染原理 javascript中可能会存在原型链污染的危险函数 原型链污染的实际应用 JavaScript中可以触发弹窗的函数 前置知识 原型对象 在JavaScript中,每个函…...

ClickHouse详解
一、概念ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。OLAP场景的关键特征绝大多数是读请求数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。已添加到数据库的数据不能修改。对于读取,从数据库中提取相当多的…...

02_Docker 安装
02_Docker 安装 文章目录02_Docker 安装2.1 安装 Docker 的先决条件2.2 在 Ubuntu 和 Debain 中安装 Docker2.2.1 检查前提条件1. 内核2.检查 Device Manager2.2 安装 DockerDocker 支持非常多的Linux平台,包括Ubuntu和RHEL,除此之外,Docker还…...

K8S集群将Docker切换到Containerd
文章目录1. 开启节点维护1.1 将节点设置成不可调度1.2 驱逐节点上的 Pod1.3 停止相关服务2. 升级到 containerd2.1 安装 containerd2.2 调整 containerd 配置2.3 修改 kubelet 启动配置参数3. 重启节点服务4. 验证升级后的节点5. 容器管理工具5.1 容器管理命令行工具对比5.2 cr…...

Kubernetes03:kubernetes 功能和架构
2.1 概述 Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过 Kubernetes 能够进行应用的自动化部署和扩缩容。在 Kubernetes 中,会将组成应用的容 器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环…...

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见
LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见想使用NI分布式系统管理器监测网络连接实时控制器的CPU和内存使用情况。从左侧窗口的树中选择了感兴趣的实时目标,然后通过选择视图自动视图来确保启用自动查看。希望看到CPU/内存选项卡,但它有显…...

buu [NPUCTF2020]Classical Cipher 1
题目描述: 题目分析: 首先输入密码 {gsv_pvb_rh_zgyzhs} 后,得到:可以得知密码是错误的,再看看密码 {gsv_pvb_rh_zgyzhs} ,排列无序,那么尝试用凯撒与栅栏解密,发现还是解不出&…...

分享96个HTML体育竞技模板,总有一款适合您
分享96个HTML体育竞技模板,总有一款适合您 96个HTML体育竞技模板下载链接:https://pan.baidu.com/s/1k2vJUlbd2Boduuqqa0EWMA?pwdj8ji 提取码:j8ji Python采集代码下载链接:采集代码.zip - 蓝奏云 北京奥运火炬PSD模板 奥运…...

Python pandas「原有或者新建」Excel中「追加新或者新建」sheet
1.pandas原有Excel中追加新sheet 使用Pandas库,我们可以轻松将数据追加到现有的Excel工作簿中的新工作表中。以下是追加新工作表的简单步骤: 读取现有的Excel文件 使用Pandas库中的read_excel()函数读取现有的Excel文件。指定Excel文件的路径和文件名&a…...

程序员必备的软技能- CPU“没有灵魂的躯体”
引言 先引用一段比较有意思的论述: 现实中每个人是由两部分构成,灵魂和躯体,灵魂依附于躯体游走于世间,现实中我们面对的每个人其实面对的是其灵魂而非肉体,肉体不过是表象而已。 灵魂本性乃一恶物,寄生于…...

基于微信小程序的青少年生理健康知识小助手
基于微信小程序的青少年生理健康知识小助手 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目…...

【scl】博图程序的导入和导出
导入或者导出博图文件的方法(也叫移植文件) 目录 前言 编辑 编辑 前言 本篇文章主要写一下关于博图文件的导入和导出,具体要怎么样才能将写好的程序或者块移植到其他地方,下面我们一起来看! 一、程序块的导入和导…...

【C语言】指针进阶
目录 一、字符指针 二、指针数组 三、数组指针 四、数组指针的使用 五、函数指针数组 六、指向函数指针数组的指针 七、回调函数 我们知道了指针的概念: 1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 2. 指针的大小是…...

18:CTK 总结篇(FAQ)
作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 经过了几个月的艰苦奋战,终于到了最后一节啦,是不是和我一样,心里有点儿小激动! 回顾之前的章节,从初级 -> 进阶 -> 高级,我们针对 CTK 做了详细的分类讲解。希望通过这些知识,大家能对模块化…...

概论_第7章_参数估计_真题__求置信区间
真题 2014.10 第30题 测量某物体的质量9次, 测得平均值 x‾15.4\overline x 15.4x15.4 g, 已知测量数据 XXX ~ N(μ,0.09)N(\mu, 0.09)N(μ,0.09) (1) 求该物体质量的置信度为0.95 的置信区间; (2)为了使置信度为0.95 的置信区间…...

Go 1.21的2个语言变化
语言行为变化 Go 1.20已经于今年2月份发布,Go 1.21也不远了,我们来先堵为快,看看Go 1.21版本里几个有趣的变化。 文末附送2道面试题。 panic(nil) func main() {defer func() {print(recover() nil)}()panic(nil) }大家先想一想这段代码…...