Linux 进程:进程状态
目录
- 一、进程状态
- 1.简单分类
- 2.详细分类
- (1)运行态
- (2)休眠态
- [1]可中断休眠态
- [2]不可中断休眠态
- (3)停止状态
- (4)死亡状态
- (5)僵死状态
- 二、特殊进程
- 1.僵尸进程
- 2.孤儿进程
- 3.守护进程
- 三、进程状态相关指令
- 1.ps-ef
- 2.ps-aux
- 3.top
- 4.kill
一、进程状态
进程就是运行中的程序,而运行中的程序也是有着多种状态的。进程状态的作用就是告诉操作系统怎样去调度进程可以让程序更好的运行,可以更充分的利用系统的资源。
在了解进程状态前首先要明白:程序在运行时是需要各种资源的,比如输入输出设备等资源。如果这些资源没有准备到位,这个进程就不能继续往下执行,就需要等待资源的到来。
比如我需要打印一份资料,打印机就是一种资源,但此时打印机正在被其他程序使用,所以我就要等其他程序使用完我才可以使用。
1.简单分类
传统的操作系统概念对于进程状态的分类较为简单,分为三类。:
- 运行态
- 就绪态
- 阻塞态
运行态:
这个状态的进程正在CPU上运行。
就绪态:
进程此时已经将自己需要的资源都拿到手了,现在只需要等待时间片的到来,拿到时间片就可以直接运行。
阻塞态:
这个进程如果处于阻塞态,代表不可以被调度运行。通常是由于资源准备不充分,所以进入阻塞态。比如上文提到的打印机:我需要打印机资源,可是此时打印机被占用了,因此我的资源准备不充分,就会陷入阻塞状态。
2.详细分类
与传统的操作系统定义不同,Linux对于进程的状态划分的更细致,主要分为五种状态:
- 运行态
- 休眠态
- 可中断休眠态
- 不可中断休眠态
- 停止状态
- 死亡状态
- 僵死状态
(1)运行态
Linux的运行态包含了传统定义中的运行态和就绪态。也就是说,在Linux中这两类进程都属于运行态:
- 正在CPU上运行的进程
- 资源准备充足,等待时间片的进程
(2)休眠态
Linux的休眠状态是指,进程需要等待某个事件发生后才可以继续运行,在等待的这段时间,进程干不了其他的事,因此需要休眠。
要等待的某个事件其实就包括了我们之前提到过的资源。我需要使用打印机,但此时打印机资源被别人使用,因此我就需要先休眠,等到打印机资源空闲了,我再醒来去打印。
而休眠态分为可中断休眠态和不可中断休眠态。
[1]可中断休眠态
进程正在休眠,等待某个事件发生后,进程会醒来继续运行,但这个休眠是可以被打断的,遇到一些特别的事件会打断进程的休眠。
比如我们在睡觉时,定了早上八点的闹钟,想着等到闹钟响了才起床。但是五点钟就有人打电话,打断了我们的休眠。
[2]不可中断休眠态
进程正在休眠,等待某个事件发生后,进程才会醒来继续运行,并且这个休眠是无法被打断的。
比如一个人突然因生病而昏迷,除非是得到医生的救治,否则是醒不过来的。所以这就是不可中断休眠,不可以被打断,除非等到特定事件(医生救治)发生。
(3)停止状态
进程处于停止状态时可以被调度,但什么都不做。
(4)死亡状态
进程已经使用完毕了,所以让进程退出,并且把所进程占用的资源全部释放。(一个人去世后,把他埋葬,处理好他的后事)
(5)僵死状态
进程使用完毕了,并且进程也退出了,但进程占用的资源没有被完全释放。(一个人去世后,没有将他埋葬,没有处理他的后事)
因此处于僵死状态的进程我们称之为僵尸进程。
二、特殊进程
这里简单介绍三种特殊进程:
- 僵尸进程
- 孤儿进程
- 守护进程
1.僵尸进程
(1)什么是僵尸进程?
僵死状态的进程,进程退出了但是它的资源没有被完全释放,是待处理状态。
(2)僵尸进程产生的原因?
一个进程如果退出了,它的pcb不会直接释放,因为进程的pcb保存了这个进程的退出原因,而这个退出原因是要交给父进程的,父进程收到这个退出原因后,就会处理子进程的后事,释放子进程的资源。
因此这个进程退出前会通知父进程,告诉父进程自己要退出了,要记得给自己处理后事。但如果父进程没有收到子进程的通知,这个子进程的资源就一直处于没有完全释放的状态,就成了僵尸进程。
这里注意一点,终端运行的指令或程序,父进程都是shell(命令行解释器)进程,这个进程的子进程一旦退出,就会及时处理。
(3)僵尸进程的危害?
僵尸进程的资源一直没有被回收,就会造成资源泄露,占据的内存没有完全释放,就会占据内存空间。如果僵尸进程过多,占据的资源就会越来越多,系统可能就会崩溃。
(4)怎么处理僵尸进程?
处理正常进程时,我们可以通过杀死进程来退出进程。可是僵尸进程是杀不死的,因为它已经死了,现在我们要做的就是释放它的资源,处理它的后事。
上文提到了,进程之所以退出后不释放资源,是因为要保存退出原因给父进程。那么我们可以通过杀死僵尸进程的父进程来释放僵尸进程的资源。因为父进程都死了,僵尸进程的退出原因就没有必要再保存了,资源自然会被释放掉。
2.孤儿进程
孤儿进程与僵尸进程相反,孤儿进程是父进程先于子进程退出。(父进程退出是不会影响子进程的)这样子进程就成为了孤儿进程,但是总得有个人管它,因此孤儿进程会被1号进程收养。当孤儿进程退出后,1号进程就会处理它的后事。
3.守护进程
守护进程也被称为精灵进程,是一种特殊的孤儿进程,运行在后台(不占据终端),在后台进行任务处理的进程。
三、进程状态相关指令
1.ps-ef
作用:查看进程相关信息
参数含义:
- UID:用户ID
- PID:进程ID
- PPID:父进程ID
- STIME:进程的开始时间
- TTY:终端号
- TIME:进程执行的总时间
- CMD:运行的程序
2.ps-aux
作用:查看进程相关信息
参数含义:
- USER:运行这个程序的用户
- PID:进程ID
- %CPU:CPU使用率
- %MEM:内存使用率
- VSZ:虚拟内存使用
- RSS:物理内存使用
- TTY:终端号
- STAT:进程的状态(如休眠态、运行态、僵死态)
- START:进程的开始时间
- TIME:进程执行的总时间
- COMMAND:运行的程序
查看指定进程的信息:
3.top
作用:查看cpu的使用率
4.kill
- kill 进程ID {作用:杀死此进程}
- kill -9 进程ID {作用:强制杀死该进程}
相关文章:

Linux 进程:进程状态
目录一、进程状态1.简单分类2.详细分类(1)运行态(2)休眠态[1]可中断休眠态[2]不可中断休眠态(3)停止状态(4)死亡状态(5)僵死状态二、特殊进程1.僵尸进程2.孤儿…...

应用程序性能优化方案,web服务五级缓存优化,服务器性能优化...
winfrom 全局异常捕获WPF 全局异常捕获Asp.Net全局异常捕获MVC 全局异常捕获AspNetNetCore 全局异常捕获一级缓存html/css/js 前端缓存二级缓存Asp.Net MVC AspNetCore 客户端缓存设置三级缓存服务端缓存四级redis 数据库缓存服务端缓存五级sqlserver 数据库缓存设置分布式缓存…...

云计算简介
本文为copy他人编写的文档,由于不确认作者名称,故无法标记来源(实际来源是群pdf文档),暂时发文为原创,因为无法贴出原文链接! 云原生的前世今生 随着公有云和私有云的广泛部署,云计…...

两个适配器网络冲突,限制访问特定网址
两个适配器网络冲突,限制访问特定网址说明命令说明说明 因为工作需要,有线网络访问局域网服务器,限制特别策略访问,如禁止远程。此时如果想要远程,在连接手机热点就可以,但由于两个网络的存在优先级。就出…...

电子科技大学 高级计算机系统结构 考试回忆
首先题量不算小,因此没有太多时间把题都记出来,但是叙述一下题的类型希望能帮到以后选了这门课大家,在网上确实没有搜到这门课有关考试的任何资料,所以我也没啥参考全凭记忆和老师的PPT结合。复习的时候老师给了大纲,就…...

【设计模式】18.观察者模式
概述 定义: 又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能…...

软测入门(一)测试理念及基础知识
软测入门理念 软件的分类 按层次划分:系统软件、应用软件按组织划分:商业软件、开源软件按结构划分:单机软件、 软件缺陷 由来 Grace Hopper发明Cobol计算机语言,也是找出电脑程序中第一个bug的女程序员 BugDefect 定义 软…...

2022年“网络安全”赛项山东省菏泽市选拔赛任务书
2022年“网络安全”赛项山东省菏泽市选拔赛任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一:Apache安全配置 任务二:数据分析-A 任务三:Windows操作系…...

LeetCode练习四:栈
文章目录一、 堆栈基础知识1.1 简介1.2 堆栈的顺序存储1.2.1 堆栈顺序存储基本描述1.2.2 堆栈顺序存储实现代码1.3 堆栈的链式存储1.3.1 堆栈的链式存储基本描述1.3.2 堆栈的链式存储实现代码二、 堆栈的基础应用2.1 堆栈基础题列表2.2 括号匹配问题2.2.1 有效的括号2.2.2 最长…...

【Python实战】爬虫教程千千万,一到实战全完蛋?今天手把手教你一键采集某网站图书信息数据啦~排名第一的竟是...(爬虫+数据可视化)
前言 一本本书,是一扇扇窗,为追求知识的人打开认知世界的窗口 一本本书,是一双双翅膀,让追求理想的人张开翅膀翱翔 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末…...

【数据结构】堆的详解
本章的知识需要有树等相关的概念,如果你还不了解请先看这篇文章:初识二叉树 堆的详解一、二叉树的顺序结构及实现1、二叉树的顺序结构2、堆的概念及结构二、堆的简单实现 (以大堆为例)1、堆的定义2、堆的初始化3、堆的销毁4、堆的打印5、堆的插入6、堆顶元素的获取7…...

New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了
最近,来自大洋彼岸那头的ChatGPT科技浪潮席卷而来,微软将chatGPT整合搜索引擎Bing开启内测后,数百万用户蜂拥而至,都想试试这个「百事通」。 赶鸭子上架,“翻车”了? 但短短上线十几天,嵌入了…...

简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)
【案例11-2】 简易计算器 【案例介绍】 1.案例描述 本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。 2.运行结果 运行结果 【案例分析】 要制作一个计算器,首先要知道它由哪些部分组成,如下图所示: 一…...
chatGPT使用:询问简历和面试相关话题(持续更新中)
chatGPT使用:询问简历和面试相关话题 写一份Java简历,价值2万元包装上面的Java简历面试自我介绍面试简述稿包装简历的方法技巧如何进行良好的自我介绍如何写一份优秀的面试简述稿如何写一份优秀的简历如何写一份优秀的面试讲述稿如何提高面试录取率如何拿到offer写一份Java简…...
Java的 Stream流
Stream流?结合Lambda表达式,用于简化集合和数组操作的API。Stream流的一个小例子:创建一个集合,存储多个姓名,把集合中所有以"张"开头的长度为3的元素存储到一个新的集合并输出。List<String> namesne…...

FL Studio 21 中文正式版发布支持多种超个性化主题
万众期待的 FL Studio 21 版本正式发布上线,目前在紧锣密鼓的安排上线中,届时所有购买正版 FL Studio 的用户,都可以免费升级到21版! 按照惯例,本次新版也会增加全新插件,来帮助大家更好地创作。今天先给大…...

【微信小程序】-- 全局配置 -- window - 导航栏(十五)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

Spring中最常用的11个扩展点
前言我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。除此之外…...
网络协议丨HTTPS是什么?
我们都知道HTTP协议,那什么是HTTPS? 我们都知道,HTTP有两个缺点——“明文”和“不安全”仅凭 HTTP 自身是无力解决的,需要引入新的 HTTPS 协议。 由于 HTTP 天生“明文”的特点,整个传输过程完全透明,任…...
Anaconda常用命令总结,anaconda、conda、miniconda的关系
Anaconda、conda、miniconda的关系 Anaconda Anaconda 是一个用于数据科学,机器学习和深度学习的开源软件包管理系统,其中包括了许多流行的 Python 包和工具Anaconda主要用于科学计算和数据分析。 conda Conda 是 Anaconda 中的包管理器,…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...