【linux进程】进程状态僵尸进程孤儿进程

news2024/9/27 5:38:13

目录

  • 一,linux下的特定进程状态
    • 1. R状态 vs S状态
    • 2. T状态 vs t 状态
    • 3. D状态 vs S状态
  • 二,OS中的进程状态
    • 1. 运行状态
    • 2. 阻塞状态
    • 3. 挂起状态
  • 三,僵尸进程和孤儿进程
    • 1. 僵尸状态和僵尸进程
    • 2. 孤儿进程

一,linux下的特定进程状态

为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务):

R运行状态 (running)
S睡眠状态 (sleeping)
D磁盘休眠状态 (Disk sleep)
T/t停止状态 (stopped)
X死亡状态 (dead)

下面我们来对这几种状态进行介绍与理解:

1. R状态 vs S状态

我们先来看一段代码的对比:

代码1:
在这里插入图片描述
在这里插入图片描述

代码2:
在这里插入图片描述
在这里插入图片描述

我们不难发现:
休眠状态本质是进程什么都没做,但是明明打印了东西,为什么还是休眠状态呢,而没有打印语句的却是运行状态?

在这里插入图片描述

2. T状态 vs t 状态

T/t 进程让进程暂停,等待被进一步唤醒,那它们两者有什么区别呢?
在这之前,我们先来了解linux系统中信号

使用指令:kill -l 查看信号

在这里插入图片描述
红色框中是我们最近学习中会涉及的信号。

使用 kill -19 指定进程停止,可以发现进程的状态变成T:
在这里插入图片描述

接着使用kill -18 指定进程继续运行,进程状态有变成S休眠态:
在这里插入图片描述

但是当我们对这个可执行程序进行gdb调试时,再观察它的状态:
程序运行到断点处时,也会进入暂停状态,这种暂停状态为 t
在这里插入图片描述

结论:
T 是纯粹的暂停状态;
t 是进程被追踪是处在暂停状态(比如调试时)

3. D状态 vs S状态

细心的同学可能已经发现了,这几种状态中有两个很相似的状态:

S被称为浅度睡眠
D被称为深度睡眠

想象一下下面的这种情况:

我们从QQ,微信上下载一个文件,本质上就是将数据拷贝至磁盘,但是目前这个文件很大,需要拷贝很久,但是此时操作系统的内存恰恰不足了,需要干掉一些进程来保证操作系统存活,此时若恰好将正在拷贝到磁盘的进程杀掉了,那么也就是拷贝失败了,如果文件非常的重要,那么操作系统就要背锅了,所以OS创造了D状态:磁盘休眠状态!

结论:
1. S:浅度休眠,浅度睡眠,可以被终止
2. D:深度休眠,为了防止向磁盘写入重要资源时被杀掉而专门创建的一个分类!
在这里插入图片描述

二,OS中的进程状态

1. 运行状态

在这里插入图片描述
在这里插入图片描述

结论:
所以R状态可以这样理解:R状态不仅是进程在CPU上正在运行,而是进程已经准备好了(就绪),可以随便被调度了!

个进程一旦持有CPU,会一直运行到这个进程结束吗??

不会!!
因为现在的内核是基于时间片进行轮转调度的。个进程的时间片到了,就会从CPU上剥离下来,又被链到队尾。
(注:这种调度方式不是1inux操作系统内核的方式,是0S教材调度算法的一种)

让多个进程以切换的方式进行调度,在一个时间段内同时得以推进代码,就叫做并发

如果有两个CPU,就会维护两个运行队列,
一个进程在被一个CPU调度时,也可以同时
也被另一个CPU调度。任何时刻,都同时有多个进程在真的同时运行,我们叫做并行

2. 阻塞状态

问题:
1. 使用scanf时,如果不对键盘进行输入,此时进程处于什么状态? 为什么会处于这个状态? scanf在等待什么资源呢?
2. 0S要对所有硬件进行管理,如何管理?

下面我们来解决这几个问题:
1. 阻塞状态在linux系统中,对应的是S/D状态:
在这里插入图片描述

2.下图是OS对硬件和进程的管理示意图:
在这里插入图片描述

结论:
1.不是只有cpu才有运行队列哦,各种设备也有自己的wait queue!
而OS对硬件的管理形式,也类似于对进程的管理,也有对应的结构体,也使用链表的形式将其链在一起。
2.一旦把进程从运行队列中断链,放到设备的等待队列里,该进程就绝对不会被调度了。把这种状态的进程就叫做 阻塞进程!
3.阻塞和运行的状态变化,往往伴随着pcb被链入不同的队列中!
入队列的不是进程的什么代码和数据而是进程的task struct

3. 挂起状态

0S当前的内存很吃紧时,假设一个进程处于阻塞状态,意味着当前不会被调度了,0S就会该进程的代码和数唤出磁盘中的swap分区,原来那块空间就腾出来了:
在这里插入图片描述
1. 但是此时这个进程还是存在的,把这种状态叫做 挂起状态/阻塞挂起状态
如果设备已经等待就绪了,这个进程被挂到运行队列之前,会重新把代码和数据唤入回来
2. 挂起状态往往和其他状态组合,比如阻塞挂起,就绪挂起…
3. 挂起的主要目的就是解决内存的燃眉之急,更加合理的利用内存资源但是频繁的挂起会导致效率问题,所以挂起是以效率换空间的做法!

三,僵尸进程和孤儿进程

1. 僵尸状态和僵尸进程

1. linux中子进程在退出时,要把自己的退出信息保留在pcb结构体中,如果没有父进程读取这个进程的退出信息,那这个子进程就一直不释放,代码和数据会被释放掉,但是pcb结构体会一直存在。
2. 直到将来对子进程进行等待(wait),如果不等待,则这个子进程就会处于僵尸状态(Z状态),如果父进程读取了/等待了,这个子进程才会变成 X状态,进而 全部回收释放
3. 处于 Z状态 的进程也称为僵尸进程
4. 如果一直不回收释放,就会导致内存泄漏问题!!
5. 进程处于Z状态,无法被ki11掉,没有意义了。

代码演示:
在这里插入图片描述
在这里插入图片描述

2. 孤儿进程

1. 父进程先退出,子进程就称之为"孤儿进程"
2. 孤儿进程被1号init进程(OS)领养,当然要有init进程回收喽。

在这里插入图片描述
我们已经启动的所有的进程,我们怎么从来没有关心过僵尸呢?内存泄漏??

直接在命令行中启动的进程,它们的父进程是bash,bash会自动回收新进程的Z

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

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

相关文章

kafka分区和副本的关系?

概念来一波 比如一个topic的消息存放在两个分区中,分区1和分区2.每个分区都有自己的一个副本。即比如分区1有副本1/副本2/副本3,分区2也有分区2的副本1/副本2/副本3。一个节点上的一个topic的可以由多个分区存放,但是每个分区的leader副本会尽…

丹摩智算平台部署 Llama 3.1:实践与体验

文章目录 前言部署前的准备创建实例 部署与配置 Llama 3.1使用心得总结 前言 在最近的开发工作中,我有机会体验了丹摩智算平台,部署并使用了 Llama 3.1 模型。在人工智能和大模型领域,Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模…

manim中文字和目标的对齐方法的使用

为什么要文字对齐 ? 对齐原则在现实生活中无处不在,比如:书籍、货架、地铁座位等等;对齐的目的其实就是在规整文案信息,对齐有利于信息传达以及视觉规范,当我们做文字编排工作时,要根据构图形…

【计算机网络 - 基础问题】每日 3 题(二十六)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

基于springboot+vue 旅游网站的设计与实现

基于springbootvue 旅游网站的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c…

【中级通信工程师】终端与业务(五):市场与通信市场

【零基础3天通关中级通信工程师】 终端与业务(五):市场与通信市场 本文是中级通信工程师考试《终端与业务》科目第五章《市场与通信市场》的复习资料和真题汇总。终端与业务是通信考试中最基础的科目之一,复习重点包括通信市场的概念、通信市场结构、以…

【IOS】申请开发者账号(公司)

官网:Apple Developer (简体中文) 申请开发者账号前提 如果是第一次申请建议注册一个新的apple id作为组织的开发者账号。(确保apple id的个人信息是真实的,不能是网名或者是其他名。后续的申请步骤需要能和apple id的个人信息对上。&#…

嵌入式开发 —— IO口高阻态模式

目 录 高阻态输入模式一、区别于浮空输入二、高阻态输入的优点 高阻态输入模式 MCU管脚的高阻态模式是电路的一种输出或输入状态。在这种状态下,电路的输入端或输出端对地或对电源的电阻非常大,在实际应用中与引脚悬空类似。 电气特性 1、高电阻值&…

C#入门教程

目录 1.if分支语句 2.面向对象 3.static简单说明 1.if分支语句 我们的这个C#里面的if语句以及这个if-else语句和C语言里面没有区别,就是打这个输出上面的方式不一样,c#里面使用的是这个console.writeline这个指令,其他的这个判断逻辑都是一…

技术美术百人计划 | 《5.1.3 PBR-基于物理的灯光》笔记

1. 辐射度学 定义:辐射度学是一门以整个电磁波段的电磁辐射能测量为研究的科学。 而计算机图形学中涉及的辐射度学,则集中于整个电磁波普中光学谱段中的可见光谱段的辐射能的计算。 1.1. 立体角 概念:单位球体上的一块区域对应的球面部分的…

计算机毕业设计 中医院问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

uniapp自定义底部tabBar

使用场景&#xff1a;在一个非tabbar页面&#xff0c;想要有底部导航效果&#xff0c;故自定义效果&#xff0c;系统原底部导航栏仍在正常使用 效果&#xff1a; 布局&#xff1a; <template><view class"tab-bar" :style"{height: height px}"…

《征服数据结构》哈夫曼树(Huffman Tree)

摘要&#xff1a; 1&#xff0c;哈夫曼树的介绍 2&#xff0c;哈夫曼树的构造 3&#xff0c;哈夫曼树带权路径长度计算 4&#xff0c;哈夫曼树的编码 5&#xff0c;哈夫曼树的解码 1&#xff0c;哈夫曼树的介绍 哈夫曼树(Huffman Tree)也叫霍夫曼树&#xff0c;或者赫夫曼树&am…

游戏怎么录制?王者荣耀游戏录制指南:iOS与电脑端全面教程

在王者荣耀的战场上&#xff0c;每一个五杀、每一次极限逃生都可能成为你游戏生涯中的高光时刻。但这些瞬间往往转瞬即逝&#xff0c;如何将它们永久保存&#xff0c;成为你游戏历程中不可磨灭的印记呢&#xff1f;本文将为你揭晓答案。无论你是手持iPhone的iOS用户&#xff0c…

正则中捕获组和非捕获组区别

捕获组和非捕获组 一. 捕获组&#xff08;Capturing Groups&#xff09;二. 非捕获组&#xff08;Non-Capturing Groups&#xff09;三. 区别四. 选择使用 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;…

GESP等级考试C++二级-数学函数

C的cmath库中有丰富的数学函数&#xff0c;通过这些函数可以进行相应的数学计算。 1 cmath库的导入 通过import指令导入cmath库&#xff0c;代码如图1所示。 图1 导入cmath库的代码 2 abs()函数 abs()函数用来获取指定数的绝对值&#xff0c;代码如图2所示。 图2 abs()函数…

【递归】7. leetcode 404 左叶子之和

1 题目描述 题目链接&#xff1a;左叶子之和 2 解答思路 递归分为三步&#xff0c;接下来就按照这三步来思考问题 第一步&#xff1a;挖掘出相同的子问题 &#xff08;关系到具体函数头的设计&#xff09; 第二步&#xff1a;只关心具体子问题做了什么 &#xff08;关系…

macOS安装Redis教程, 通过brew命令, 时间是2024年9月26日, redis版本是0.7.2

搜索: brew search redis安装Redis: brew install redis关于启动命令的提示: To start redis now and restart at login:brew services start redis Or, if you dont want/need a background service you can just run:/opt/homebrew/opt/redis/bin/redis-server /opt/home…

【图像处理】多幅不同焦距的同一个物体的平面图象,合成一幅具有立体效果的单幅图像原理(二)

实现多幅不同焦距图像合成一幅具有立体效果的图像可以使用以下算法和开源库&#xff1a; 实现算法 图像对齐 使用特征点匹配&#xff08;如 SIFT、SURF 或 ORB&#xff09;来对齐图像。利用 RANSAC 算法剔除离群点&#xff0c;估计变换矩阵。 深度图生成 基于图像的焦距和视角…

Teams集成-会议侧边栏应用开发-会议转写

Teams应用开发&#xff0c;主要是权限比较麻烦&#xff0c;大量阅读和实践&#xff0c;摸索了几周&#xff0c;才搞明白。现将经验总结如下&#xff1a; 一、目标&#xff1a;开发一个Teams会议的侧边栏应用&#xff0c;实现会议的实时转写。 二、前提&#xff1a; 1&#x…