Linux进程状态(僵尸进程,孤儿进程)+进程优先级+进程调度与切换

news2024/10/5 19:19:17

Linux进程状态[僵尸进程,孤儿进程]+进程优先级

  • 一.进程状态
    • 1.进程排队
    • 2.教材上对于进程状态的描述:
      • 1.阻塞挂起
    • 3.Linux下具体的进程状态:
      • 1.Linux下的进程状态数组
      • 2.R
      • 3.S:可终止睡眠---浅度睡眠
        • 1.补充:前台进程和后台进程
        • 2.一种"奇怪"的现象
      • 4.D:不可终止睡眠---深度睡眠
      • 5.T
      • 6.t
      • 7.Z
      • 8.X
  • 二.僵尸进程
    • 1.什么是僵尸进程
    • 2.为什么要有僵尸进程的存在
    • 2.实例
    • 3.僵尸进程的危害
  • 三.孤儿进程
    • 1.孤儿进程的概念
    • 2.实例
  • 四.进程优先级
    • 1.概念
    • 2.修改进程优先级
      • 1.top命令
      • 2.Linux为什么要让调整优先级是受到限制的呢?
    • 3.测试进程优先级
  • 五.进程调度与切换
    • 1.切换
      • 1.概念准备
      • 2.进程切换的方式
      • 3.总结
    • 2.调度
      • 1.Linux系统下的调度特性
      • 2.运行队列结构
      • 3.解决优先级问题
      • 4.解决饥饿问题
      • 5.解决效率问题

一.进程状态

1.进程排队

首先,我们要先说明一下将内存排队的概念

2.教材上对于进程状态的描述:

首先我们要先明确两点:
在这里插入图片描述
在这里插入图片描述

在运行队列就是运行状态:
不要用人的感觉去评价CPU的速度,而且CPU是轮转调度

其中,阻塞状态就像是这样:
在这里插入图片描述
在这里插入图片描述
此时这个进程就处于了阻塞状态
当我从键盘输入数据之后
在这里插入图片描述
才能继续向下运行

1.阻塞挂起

在这里插入图片描述

3.Linux下具体的进程状态:

1.Linux下的进程状态数组

这是Linux内核源代码对于进程状态的描述

static const char * const task_state_array[] = {
"R (running)",
"S (sleeping)", 
"D (disk sleep)",
"T (stopped)", 
"t (tracing stop)", 
"X (dead)",
"Z (zombie)",
};

其中:
R:运行状态

阻塞状态有以下4种:
S:睡眠状态:
D:睡眠状态:
T:暂停状态:
t: 暂停状态:

还有两个状态:
Z:僵尸状态
X:退出状态

下面我们就在Linux环境下
来看一下各种状态的样子

2.R

我们先来看一下R状态:
这里我们写了一个while(1)死循环的代码来看R状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当我们退出mycmd对应的进程之前
这个进程显示R+状态
在这里插入图片描述

3.S:可终止睡眠—浅度睡眠

什么叫做睡眠状态呢?

睡眠状态属于阻塞状态的一种
是比较常见的一种阻塞状态
该进程因为需要等待某种软硬件资源的提供而进入睡眠状态
就跟我们刚才说的教材上对于进程状态的描述是一样的

为什么说S是可终止睡眠呢?
因为这种睡眠状态是可以被我们使用ctrl+c退出的
下面给大家看一下:
在这里插入图片描述
sleep(1)是让程序休眠1s
在这段期间进程处于睡眠状态,一直等待这1s过去
在这里插入图片描述
这个进程一直处于S状态,当我们ctrl+c时,该进程正常退出
你说的好像没什么用吧,一般情况下还能退出不了吗?

1.补充:前台进程和后台进程

有些时候还真就退出不了
前面给大家看一看
先介绍两个概念

前台进程: 进程状态显示为+,可以被ctrl+c退出掉
此时是无法执行指令的

后台进程:进程状态显示时没有+,无法被ctrl+c退出掉
此时是可以执行指令的

我们正常./可执行程序名字的时候是默认以前台进程方式来运行的
但是./可执行程序名字 &就会以后台进程方式来运行该进程

./mycmd  前台进程
./mycmd & 后台进程

在这里插入图片描述
为了更好地演示,我们加一行printf

这是作为前台进程运行:
在这里插入图片描述
此时我输入了ls,pwd这些指令,都没有用
而且ctrl+c成功退出

这是作为后台进程运行:
在这里插入图片描述

此时我输入ls,pwd这些命令就都有用了
不过ctrl+c无法退出
只能使用kill -9 进程PID来杀死进程才能退出
在这里插入图片描述

关于前台进程和后台进程我们以后还会详细介绍的
目前在这篇博客中大家先了解一下即可

2.一种"奇怪"的现象

有些细心的小伙伴可能发现了一个现象:
刚才我们printf打印的那个进程为什么明明打印了
却还是显示S状态呢?
它不应该显示R状态吗?
在这里插入图片描述
在这里插入图片描述
因为:
printf的实质是在显示器上打印
printf导致该进程频繁与显示器交互,交互时因为要等待显示器所以就处于S了
而且大部分时间是处于交互的
因此大部分时候我们看到的都是S,
只有非常低的概率才能看到R

也正是因为这个原因,我们在一开始介绍R状态的时候才会只用一个while(1)死循环

4.D:不可终止睡眠—深度睡眠

首先要说明一点:

操作系统在被逼急了的时候(资源特别紧张的时候),是会杀掉进程的(至少Linux下是这样)

因此当我们的计算机资源特别特别紧缺的时候,操作系统可能就会杀掉一部分进程

这时,如果一个特别重要的进程被杀掉了,那么会对用户造成非常大的影响.因此才有了这个D状态的出现
在这里插入图片描述

5.T

T:暂停状态
为什么会有暂停状态呢?

有些时候某些进程具有危险操作,如果你非要执行这些进程,那么操作系统就会暂停这个进程来保护计算机

首先我们要先介绍几个命令

kill -l:查看进程信号

kill -19 进程PID:暂停进程  

kill -18 进程PID:让暂停进程继续运行

在这里插入图片描述
下面我们来演示一下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一旦暂停进程了,那么这个进程就会自动从前台进程切换为后台进程,即使之后又继续运行了,但是依然是后台进程

6.t

为什么会有t状态呢?

"t (tracing stop)"

追踪停止
其实在我们使用gdb调试程序的时候,这个进程就处于t状态

大家一定不要忘了,想要用gdb调试可执行程序
使用gcc编译时要加-g选项,即使用debug模式生成可执行程序

在这里插入图片描述
下面我们来演示一下
在这里插入图片描述
当我打上断点开始运行,它就进入了t状态

7.Z

Z是僵尸状态,
处于僵尸状态的进程就是僵尸进程
我们下面会详细解释的

8.X

死亡状态(退出状态)
当一个进程要退出的时候,先把它置为X状态,然后退出这个进程

二.僵尸进程

1.什么是僵尸进程

在这里插入图片描述

2.为什么要有僵尸进程的存在

在这里插入图片描述

2.实例

在这里插入图片描述
这个代码的含义就是:
创建一个子进程,然后子进程运行5秒之后就会退出
父进程一直运行,但是父进程并不会接收子进程的结束信息
在这里插入图片描述
在这里插入图片描述
我们知道

Linux中的普通进程都有它的父进程
除非该进程是由我们所创建的进程所创建的
否则该进程的父亲就是bash

而bash会自动接收它的子进程的退出信息

那么能不能让父进程接收子进程的退出信息呢?
当然可以啦

使用
wait(NULL);
等待子进程  会接收子进程的退出信息

头文件:
#include <sys/wait.h>

下面我们来演示一下
在这里插入图片描述

这个代码的意思是:
子进程运行5s后退出
父进程运行8s后退出,退出后立即接收子进程的退出信息
然后休眠5s后退出

在子进程退出之后,父进程接收子进程退出信息之前
子进程一直处于僵尸状态
父进程接收子进程退出信息之后
子进程成功退出
在这里插入图片描述

3.僵尸进程的危害

在这里插入图片描述

三.孤儿进程

1.孤儿进程的概念

在这里插入图片描述

2.实例

在这里插入图片描述
这个代码的意思是:
子进程一直死循环运行
父进程运行5s之后退出
退出之后子进程就成为了孤儿进程
在这里插入图片描述
在这里插入图片描述

四.进程优先级

1.概念

在这里插入图片描述
在Linux中
优先级是通过一个整形变量来表示的
默认优先级是80
整个优先级的区间是[60,99](包括60 和99)
一共40个整数

数字越低,优先级越高
数字越高,优先级越低

2.修改进程优先级

Linux系统允许用户调整优先级,但是不允许用户直接修改优先级
而是通过修改nice值的方式来修改优先级

ps -l 查看进程信息

在这里插入图片描述
下面我们就来修改一下进程优先级

注意:我们不建议去调整优先级

在这里介绍这个修改进程优先级的方法是为了让我们
以后如果别人修改进程优先级,我们能看懂
还有一点就是加深一下理解

1.top命令

top命令 修改进程优先级
按q键退出
新PRI=PRI(old)+nice

注意:
1.PRI(old)一直都默认是80
这样规定是为了让我们以后修改进程优先级的时候可以不用管上一次的优先级是多少
修改起来更加方便

2.因为PRI的范围是[60,99]
而PRI(old)一直都是80
所以nice的范围是[-20,19]
1.ps -la  查看进程信息
2.top
进入top之后,我们按r
然后输入我们想要修改的进程的PID
然后输入nice值
最后退出即可

在这里插入图片描述
在这里我想将优先级修改为90
成功修改

2.Linux为什么要让调整优先级是受到限制的呢?

在这里插入图片描述

任何的分时操作系统,在进程调度上需要进行较为公平的调度!

3.测试进程优先级

下面我们来测试一下进程优先级的上下限
分别调整两次mycmd这个进程的优先级
第一次调为0(输入-80)
第二次调为200(输入120)
在这里插入图片描述
直接不允许我调整为0
我想要调整为200,结果只能调整为99

五.进程调度与切换

1.切换

1.概念准备

在这里插入图片描述

2.进程切换的方式

首先我们先举一个日常生活中的小例子
其实进程切换也是这样进行的
在这里插入图片描述
进程切换是这样运行的:
在这里插入图片描述

3.总结

在这里插入图片描述
此时再回头看看那个图书馆的例子
就能更深刻地理解进程切换了

2.调度

1.Linux系统下的调度特性

在这里插入图片描述
那么Linux操作系统的调度特性是如何做到的呢?
这就跟Linux运行队列的结构紧密相关了
下面我们就来看一下Linux运行队列的结构

2.运行队列结构

在这里插入图片描述
乍一看这个结构好麻烦啊
不要担心,我们只需要关心几个重要的结构数据即可
下面我们会一一介绍这个运行队列的结构是如何同时兼顾
优先级,效率和饥饿问题的

3.解决优先级问题

在这里插入图片描述

4.解决饥饿问题

在这里插入图片描述

操作系统是根据nr_active的值来迅速确定queue数组中的进程个数的
据此判断什么时候可以交换active指针和expired指针的指向

当一个进程的时间片耗尽了,这个进程就是过期了,就会进入过期队列当中

当一个进程运行结束了,那么就退出运行队列,也不再进入过期队列 而是变为僵尸进程,等待父进程读取结束信息

5.解决效率问题

可是这样的话,每次都还要去遍历一遍这个queue数组
又因为你CPU进程切换非常频繁,效率能不能再好一点了
这就是那个int bitmap[5];的作用了
在这里插入图片描述

以上就是Linux进程状态(僵尸进程,孤儿进程)+进程优先级+进程调度与切换的全部内容,希望能对大家有所帮助!

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

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

相关文章

ESXi 添加虚拟闪存 无可选设备问题排查

虚拟内存是计算机系统中的一种技术&#xff0c;它可以将计算机硬盘的一部分空间作为临时存储器来使用。当计算机的物理内存&#xff08;RAM&#xff09;不足时&#xff0c;操作系统可以将部分数据从内存移至硬盘的虚拟内存空间中&#xff0c;以释放内存供其他程序使用。虚拟内存…

C++基础 -4- C/C++混合编程

引用格式(图片代码段呈现) extern "C" {#include "string.h" }代码验证 &#xff08;分别使用了C/C 的标准输出&#xff09; #include "iostream"using namespace std;extern "C" { #include "stdio.h" #include "…

Arthas 使用

Arthas是阿里巴巴开源的Java诊断工具&#xff0c;采用命令行交互的形式进行问题的定位与诊断。它能够帮助你. 解决以下问题&#xff1a; 这个类从哪个 jar 包加载的&#xff1f;为什么会报各种类相关的 Exception&#xff1f;我改的代码为什么没有执行到&#xff1f;难道是我…

卸载软件最最最彻底的工具——Uninstall Tool

卸载软件最最最彻底的工具——Uninstall Tool Uninstall Tool 是一款功能强大的专业卸载工具。针对一些普通卸载不彻底的问题&#xff0c;它可以做到最优&#xff0c;比如Matlab等软件的卸载难的问题也可以较好地解决。 它比 Windows 自带的“添加/删除程序”功能快 3 倍&…

深度学习:全面了解深度学习-从理论到实践

深度学习&#xff1a;全面了解深度学习-从理论到实践 摘要&#xff1a;本文旨在为读者提供一份全面的深度学习指南&#xff0c;从基本概念到实际应用&#xff0c;从理论数学到实践技术&#xff0c;带领读者逐步深入了解这一领域。我们将一起探讨深度学习的历史、发展现状&#…

算法通关第十七关青铜挑战——原来贪心如此简单(什么是贪心思想and经典例题分析)

大家好&#xff0c;我是怒码少年小码。 一转眼&#xff0c;又到了11月末尾了&#xff0c;莫名感觉今年真的很快&#x1f602;。今天的主角是贪心。 贪心的思想非常不好解释&#xff0c;而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来&#xff…

Ubuntu 22.03 LTS 安装deepin-terminal 分屏

安装 源里面自带了这个软件&#xff0c;可以直接装 sudo apt install deepin-terminal 启动 按下Win键&#xff0c;输入deep即可快速检索出图标&#xff0c;点击启动 效果 分屏 CtrlShiftH 水平分割 CtrlShiftJ 垂直分割 最多分割成四个小窗口&#xff0c;鼠标点击可以切换…

C#常见的设计模式-结构型模式

引言 设计模式是软件工程中用于解决常见问题的可复用解决方案。在C#编程中&#xff0c;常见的设计模式具有广泛的应用。本篇博客将重点介绍C#中常见的结构型设计模式&#xff0c;包括适配器模式、装饰器模式、代理模式、组合模式和享元模式。 目录 引言1. 适配器模式(Adapter …

便利高效双赢:无人机油气管道巡检全面升级

我国庞大的油气管道网络&#xff0c;包括原油、成品和天然气管道&#xff0c;因为地理区域广泛、建设年代久远、安全事故频发等现实因素&#xff0c;对管道的安全巡护与管理提出了更高的需求。在这一背景下&#xff0c;传统的人工巡护方式显然已经难以满足对高、精、准的要求。…

【受体 + 二系统 】

GPCR A级超家族家庭成员/基因评论胺受体受体的六个亚家族总共包括45个基因&#xff08;其中4个是假基因&#xff09;;这六个亚家族是5-羟色胺&#xff08;5-HT&#xff0c;血清素&#xff09;受体&#xff08;13个基因&#xff09;&#xff0c;多巴胺受体&#xff08;5个基…

瑞数五代ast反混淆笔记一

第一部分 瑞数五代ast反混淆笔记一 文章目录 前言一、分析第一层js文件二、转换为switch-case三、效果图总结 前言 瑞数五代的反混淆做了很久了&#xff0c;当时写的很复杂&#xff0c;也没有记笔记&#xff0c;现在看代码都看不懂了&#xff0c;重新归顺下逻辑思路 一、分析第…

Bitcoin SV 和 Bitcoin Core 之间首次跨链原子交换

我们已经执行了 Bitcoin SV 和 Bitcoin Core 之间的首次原子交换。 这一成就代表了比特币 SV 的重大进步&#xff0c;以去信任的方式促进了与其他区块链的无缝互操作性。 图片源自Gemini 在上一篇文章中&#xff0c;我们解释了原子交换的高级理论。 我们深入研究了使用哈希时间…

供配电系统智能化监控

供配电系统智能化监控是指利用先进的监测技术、自动化控制技术、计算机网络技术等&#xff0c;对供配电系统进行实时、全方位的监测和控制&#xff0c;以实现供配电系统的安全、稳定、高效运行。 供配电系统智能化监控的主要功能包括&#xff1a; 实时数据采集&#xff1a;通过…

C语言WFC绘制矩形

代码实现&#xff1a; void CCGDrawingView::Rectangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4, COLORREF color,CDC* pDC) {CPen redPen(PS_SOLID, 1, color);CBrush redBursh(color);CPen* pOldPen pDC->SelectObject(&redPen);CBrush* p…

十八数字文化受邀参加版博会“区块链+版权”创新应用试点研讨会

2023年11月23日至25日&#xff0c;以“版权新时代 赋能新发展”为主题的第九届中国国际版权博览会在成都市中国西部国际博览城和天府国际会议中心举办。版博会是我国版权领域唯一的综合性、国际性、国家级版权专业博览会&#xff0c;本届版博会由国家版权局主办&#xff0c;四川…

双十一备战与复盘

如何组织备战 重要节点 从大促启动会开始后我就开始计划我们本次备战的整体节奏。 挑战在哪 以上内容介绍了CDP平台有多么重要&#xff0c;那么画像系统备战的核心挑战在“如何保障在大流量高并发情况下系统稳定提供高性能服务”&#xff0c;主要表现在&#xff1a;稳定性、…

【GO】k8s 管理系统项目16[前端部分--项目初始化]-学习记录

学习链接 https://blog.csdn.net/qq_29974229/article/details/129119279?spm1001.2014.3001.5502 nvm use v16.15.0 npm install vue -g npm install -g vue/clivue create k8s-plantform-fe选择 Default cd k8s-plantform-fe npm run servecd ./src mkdir views mkdir r…

ESXi 6.7 升级 7.0

方式一&#xff1a;esxcli方式 1.登陆exsi web界面。 启用控制台shell 2.存储-datastore-数据存储浏览器&#xff0c;上载 ESXI-7.0.0-depot.zip升级文件。记住此datastore的位置 ssh连接ESXI主机 vmware -vl 查看当前版本 查看升级包中对应的版本信息&#xff1a; es…

长沙市中小学入学报名流程及上传证件照电子版制作方法

长沙市中小学入学报名是家长和学生迈向教育之门的第一步。通常&#xff0c;报名过程分为线上和线下两个阶段。首先&#xff0c;家长需在规定时间内登录报名系统&#xff0c;填写详细的入学信息等。长沙市注重教育公平&#xff0c;为确保每个孩子都有平等的入学机会&#xff0c;…

(六)上市企业实施IPD成功案例分享之——中兴通讯

在通信业&#xff0c;项目交付的质量和效率&#xff0c;很大程度上影响着运营商的竞争力&#xff0c;先进的项目管理理念、数字化的项目管理工具及丰富的实践经验&#xff0c;是运营商选择合作伙伴的主要维度。在中国&#xff0c;IPD之所以名气这么大&#xff0c;最大的原因就是…