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

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.mzph.cn/news/173808.shtml

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

相关文章

探索人类命运与宇宙奥秘的震撼之旅 豆瓣高分巨作《三体》湖北卫视开播

当思考触及宇宙的边缘&#xff0c;当人类命运与外星文明相碰撞&#xff0c;电视剧《三体》以其深邃的内涵和引人深思的故事&#xff0c;重新审视人类的过去、现在和未来&#xff0c;带我们逐步揭开地外未知文明“三体”世界的神秘面纱。根据著名科幻作家刘慈欣同名小说改编&…

Ubuntu新手使用教程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Django之ORM

ORM全称对象关系映射 作用&#xff1a;通过python面向对象的代码简单快捷的操作数据库&#xff0c;但是封装程度太高&#xff0c;有时候sql语句的效率偏低&#xff0c;需要自己写sql语句 类----->表 对象--->记录 对象属性--->记录某个字段对应的值 写在models.p…

如何通过内网穿透实现远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

骑行三家村赏红杉之旅:挑战与汗水共存,美景和惊喜同行的路线

2023年11月25日&#xff0c;一个冬日里阳光明媚的周末&#xff0c;校长骑行队的骑友们相约&#xff0c;共同踏上了骑行三家村赏红杉林的旅程。这次骑行路线从大观公园门口开始&#xff0c;途径大观湿地公园、干勾尾、碧鸡关加油站、太平、水沟盖板路、明朗、绝望坡、山顶、三家…

kali安装内网穿透工具并实现ssh远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh远程连接kali 1…

成都优优聚美团代运营——让您脱颖而出!

随着互联网的快速发展&#xff0c;越来越多的企业开始注重线上业务的拓展&#xff0c;而美团作为国内领先的生活服务平台之一&#xff0c;自然成为了许多品牌宣传和推广的重要渠道。在成都地区&#xff0c;优优聚美团代运营公司凭借多年的经验和专业团队的优势&#xff0c;成为…

单调栈:LeetCode 907. 子数组的最小值之和

907. 子数组的最小值之和 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 10^9 7 。 思路同乘法原理 LeetCode 828. 统计子串中的唯一字符-…

护眼灯有效果吗?对孩子眼睛好的护眼台灯推荐

2022年12月29日&#xff0c;内蒙古消费者协会发布的比较试验结果显示&#xff0c;被检测的35款读写作业台灯样品中有12款标记项目不符合国家强制性标准要求&#xff0c;占被检测样品的34%&#xff0c;其中博士有成、大力智能、霍尼韦尔位列质量黑榜。该从哪些方面注意权衡做好选…

如何用CHAT配置linux的远程连接?

问CHAT&#xff1a;配置linux的远程连接 1.下载ssh 2.启动ssh服务 3.查看ssh服务状态 4.设置ssh服务开机自启动 5.设置windows的cmd下ssh 6.通过cmd的ssh命令远程到linux linux的ip:10.8.9.23 用户名:Li CHAT回复&#xff1a;以下是为配置Linux的远程连接的步骤说明&#xff1a…

AMD ROCm软件栈组件介绍

AMD ROCm™ Platform 1.1 ROCm简介 参考&#xff1a;https://github.com/RadeonOpenCompute/ROCm ROCm&#xff08;Radeon Open Compute&#xff09;开源软件栈。 在NVIDIA GPU上&#xff0c;术语“CUDA”通常是指GPU编程编译器、API和运行时库&#xff0c;但ROCm不那么单一…

【虹科干货】什么是软件成分分析(SCA)?

大家或许都发现了&#xff0c;开发人员愈发依赖开源代码来快速为其专有软件添加功能。据估计&#xff0c;开源代码占专有应用程序代码库的 60-80%。相伴而来的&#xff0c;除了更高的效率&#xff0c;还有更高的风险。因此&#xff0c;管理开源代码对于降低组织的安全风险至关重…

原神「神铸赋形」活动祈愿现已开启

亲爱的旅行者&#xff0c;「神铸赋形」活动祈愿现已开启&#xff0c;「单手剑静水流涌之辉」「法器碧落之珑」概率UP&#xff01; 活动期间&#xff0c;旅行者可以在「神铸赋形」活动祈愿中获得更多武器与角色&#xff0c;提升队伍的战斗力&#xff01; 〓祈愿时间〓 4.2版本更…

Spinnaker 基于 docker registry 触发部署

docker registry 触发部署 Spinnaker可以通过Docker镜像的变化来触发部署&#xff0c;这种方法允许你在Docker镜像发生变化时自动启动新的部署流程。 示例原理如下图所示&#xff1a; 以下是如何在Spinnaker中实现基于Docker Registry触发部署的配置流程。最终实现的效果如下…

数据库应用:MongoDB 数据备份与恢复

目录 一、实验 1.MongoDB 数据库备份与恢复 2.MongoDB 数据表备份与恢复 二、问题 1.MongoDB有哪些命令行工具实现数据备份与恢复 一、实验 1.MongoDB 数据库备份与恢复 &#xff08;1&#xff09;查看版本 rootnode1:~# mongo --version&#xff08;2&#xff09;准备…

html学习

1.框架标签 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body ><p align"center"><a href "http://www.baidu.com" target"aa">百度&l…

BUUCTF [MRCTF2020]你能看懂音符吗 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 感谢Galaxy师傅供题。 密文&#xff1a; 下载附件&#xff0c;得到一个rar压缩包。 解题思路&#xff1a; 1、尝试解压rar压缩包&#xff0c;出现错误无法解压。 使用010 Editor…

YOLOv7独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

大电流和大电压谁对人体伤害大

突然想起以前看的这个&#xff0c; 网上有很多解答了这个问题&#xff0c;答案是大电流比大电压对人体伤害大。 我之所以重新来写些&#xff0c; 是想起一种有趣的比喻&#xff0c; 这个答案不绝对。 先看一个场景&#xff0c; 一群牛和一头老虎对你冲来&#xff0c; 谁对你的…

机器视觉 AI 数据集制作

工业中&#xff0c;机器视觉物体分拣时&#xff0c;需要制作&#xff0c;数据集&#xff0c;那么&#xff0c;一般情况下&#xff0c;可以选择几个物体的几张图片&#xff0c;或者视频&#xff0c;将待识别的物体的掩模扣取出来&#xff0c;随机的贴在 传送带背景中&#xff0c…