Linux 进程(三)

Linux进程状态的查看:

        这是Linux内核源代码对于进程状态的定义:

         R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
        S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠,也叫浅度睡眠(interruptible sleep))。

        D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
        T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
        X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

         注意:状态后面有无+ 号说明这个进程是否为前台进程,有+就是前台进程可以通过ctrl+c终止掉,没有就需要通过 指令(kill -9 pid) 来杀死进程。

 R运行状态、 S睡眠状态(浅度睡眠)

        

        写一段简单的代码:

        这是一个死循环,但是我们经过多次的命令来查看该进程的状态发现,其都是s+ 的状态,难道是因为sleep的原因吗?但是经过实验发现即使是把sleep去掉,查看进程也是处于s+状态,原因是,cpu的处理速度极快(相对于外设来说,可能cpu已经处理完进程了,但是还没有打印在屏幕上),加上还有时间片的概念,导致一个进程在cpu上可能运行几毫秒就结束了,所以说即使查看死循环,也是s+的状态。

        那么怎么样才能查看到死循环,只有跑一个什么都不干的死循环!!

        只有这样的死循环才会出现R状态。

        D磁盘休眠状态

        当内存内存吃紧时,操作系统会杀死一些进程,避免操作系统挂掉,那么有些进程正在和设备之间互动,或者等待设备的反馈信息,或者等待设备的资源,如果杀死该进程,就会造成一些损失,那么D状态就是避免操作系统在内存吃紧的情况下“滥杀无辜”给予进程的“免死金牌”。

        但是系统一旦出现D的情况,说明操作系统距离挂掉也就不远了,说明当前磁盘反应的速度十分缓慢,缓慢到还被操作系统察觉到!!

        所以说一般情况下D状态是不会出现的。

         T、t停止状态(stopped)

                以上两个命令就是停止和重新运行进程:

        注意:ctrl + z 也是停止进程,ctrl+ c是中断程序,注意区别! 

        gdb调试模式下会出下 “t”。

        在系统中有时也会出现 T 大部分原因是 操作系统为了保护某些有害的进程对硬件的访问,而停止了进程。

          X死亡状态(dead):

        运行五秒后子进程显示出defunct(失效的;死人)转台!

        僵尸进程

        僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
        僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
        所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

        还是上面的代码!

为什么会有僵尸进程呢?

        创建进程是给用户完成工作的,进程结束时需要有数据结果!保存到pcb中,只有父进程读取了之后,拿到数据后,该进程才能销毁。

        如果父进程不读取子进程,那么子进程会一直处于僵尸状态,pcb也是一直会存在的,会占据内存,造成内存泄露!!!

        孤儿进程:

        父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?
        父进程先退出,子进程就称之为“孤儿进程”
        孤儿进程被1号init进程领养,当然要有init进程回收喽。

        代码:

        1号进程也可以是操作系统。同时子进程变成后台进程,只能通过指令来杀死。

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

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

相关文章

openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性

文章目录 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性138.1 操作步骤 openGauss学习笔记-138 openGauss 数据库运维-例行维护-检查时间一致性 数据库事务一致性通过逻辑时钟保证,与操作系统时间无关,但是系统时间不一致会导致…

18487.1 - 2015 电动汽车充电系统标准 第1部分 关键点梳理

一、部分知识介绍 1、连接方式 使用电缆和连接器将电动汽车接入电网(电源)的方法。 1.1、连接方式A 1.2、连接方式B 1.3、连接方式C 2、电动汽车控电设备 2.1、按照输出电压分类 1)交流 单相 220V,三相 380V. 2&#xff09…

【超全】React学习笔记 下:路由与Redux状态管理

React学习笔记 React系列笔记学习 上篇笔记地址:【超全】React学习笔记 上:基础使用与脚手架 中篇笔记地址:【超全】React学习笔记 中:进阶语法与原理机制 React路由概念与理解使用 1. 引入 React路由是构建单页面应用(SPA, Sin…

CSS 选择器优先级,!important 也会被覆盖?

目录 1,重要性2,专用性3,源代码顺序 CSS 属性值的计算过程中。其中第2步层叠冲突只是简单说明了下,这篇文章来详细介绍。 层叠冲突更广泛的被称为 CSS选择器优先级计算。 为什么叫层叠冲突,可以理解为 CSS 是 Cascadi…

基于 Python+flask 构建态势感知系统(附完整源码)

一、开发 一个基于linux的态势感知系统,基于python和flask框架开发,项目文件目录如下: admin -核心算法 charts -图表生成 model -类 app.py -主文件 config.py -配置文件 install.py -安装文件 二、安装 1、配置 数据库密码默认设…

redis单机版本安装

redis单机版本安装 1.redis单机版源码编译安装搭建(4.0示例) redis下载地址 https://redis.io/download redis源码编译 #!/bin/sh yum install -y wget gcc gcc-c make tar openssl openssl-devel cmakecd /usr/local/src wget http://download.redis.io/releases/redis-4…

华为杯研究生数学建模优秀参考论文(优秀论文参考2004-2022年)

一、背景介绍 中国研究生数学建模竞赛是一项面向在校研究生进行数学建模应用研究的学术竞赛活动,是广大在校研究生提高建立数学模型和运用互联网信息技术解决实际问题能力,培养科研创新精神和团队合作意识的大平台,大赛赞助单位为华为技术有限…

什么是Daily Scrum?

Daily Scrum(每日站会),Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的,并及时做出必要的调整。 每日站会一般只开15分钟,为了让事情更简单些,这…

无线物理层安全学习

文章目录 3.17到3.203.85到3.88 3.17到3.20 3.85到3.88

论文阅读——Img2LLM(cvpr2023)

arxiv:[2212.10846] From Images to Textual Prompts: Zero-shot VQA with Frozen Large Language Models (arxiv.org) 一、介绍 使用大语言模解决VQA任务的方法大概两种:multi-modal pretraining and language-mediated VQA,即多模态预训练…

进程的创建:fork()

引入 创建进程的方式我们已经学习了一个!在我们运行指令(或者运行我们自己写的可执行程序)的时候不就是创建了一个进程嘛?那个创建进程的方式称为指令级别的创建子进程! 那如果我们想要在代码中创建进程该怎么办呢? fork() for…

【算法通关村】链表基础经典问题解析

【算法通关村】链表基础&经典问题解析 一.什么是链表 链表是一种通过指针将多个节点串联在一起的线性结构,每一个节点(结点)都由两部分组成,一个是数据域(用来存储数据),一个是指针域&…

第一百八十六回 DropdownMenu组件

文章目录 1. 概念介绍2. 使用方法2.1 DropdownMenu2.1 DropdownMenuEntry 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何禁止页面跟随手机自动旋转"相关的内容,本章回中将介 绍DropdownMenu组件.闲话休提,让我们一起Talk Flutter吧。 …

python+pytest接口自动化(6)-请求参数格式的确定

我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求。例如某个接口规定的请求主体的编码方式为 application/json,那么在…

Redis面试题:redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别呢?这两种方式,哪种恢复的比较快呢?

目录 面试官:redis做为缓存,数据的持久化是怎么做的? 面试官:这两种持久化方式有什么区别呢? 面试官:这两种方式,哪种恢复的比较快呢? 面试官:redis做为缓存&#xff…

基于YOLOv8深度学习的钢材表面缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

JVM虚拟机:JVM参数之标配参数

本文重点 本文我们将学习JVM中的标配参数 标配参数 从jdk刚开始就有的参数,比如: -version -help -showversion

Vivado版本控制

Vivado版本控制 如果您有幸进入FPGA领域,那么会遇到版本控制问题,本文讲解的是如何用git进行Vivado进行版本控制。 搭建Git环境 一 首先需要一个git环境,并选择一个托管平台(github,gitlab,gitee) Git下载地址&…

JavaSE自定义验证码图片生成器

设计项目的时候打算在原有的功能上补充验证码功能,在实现了邮箱验证码之后想着顺便把一个简单的图片验证码生成器也实现一下,用作分享。 注意,实际开发中验证码往往采用各种组件,通过导入依赖来在后端开发时使用相关功能&#xf…

9.ROS的TF坐标变换(三):坐标系关系查看与一个案例

1 查看目前的坐标系变化 我们先安装功能包: sudo apt install ros-melodic-tf2-tools安装成功! 我们先启动上次的发布坐标变换的节点: liuhongweiliuhongwei-Legion-Y9000P-IRX8H:~/Desktop/final/my_catkin$ source devel/setup.bash liuho…