【Linux】进程状态与进程优先级

目录

  • 一、什么是进程
  • 二、进程状态
    • 1、Linux下的进程状态
    • 2、两个特殊进程
      • 1、僵尸进程
      • 2、孤儿进程
  • 三、进程优先级

一、什么是进程

进程就是程序的一个执行实例,也就是正在执行的程序,然后由操作系统帮助我们将程序转化为进程,完成特定的任务。
进程 = 内核关于进程的相关数据结构 + 当前进程的代码和数据

那么操作系统又是怎样管理进程的呢?
我们对应的进程是需要被操作系统管理的,而管理的思路是先描述,再组织,为了更好的描述进程,所以每一个操作系统把可执行程序加载进内存都会创建一个对应的数据结构对象。这个对象称为PCB,他是所有进程属性的集合,操作系统直接对PCB进行管理。在Linux中描述PCB的结构体称为task struct。

二、进程状态

运行状态: 进程在运行队列里,就是运行状态,并不是进程在运行当中,就是运行状态。

阻塞状态: 进程因为等待某种条件就绪,从而导致进程不被调度,也就是我们常说的程序卡住了。简而言之,进程等待某种外设资源就绪的过程,就是阻塞状态。

挂起状态: 如果系统中存在一个下载任务的进程,而此时没有网卡设备,进程就进入阻塞状态。当存在许多进程时,系统正在调度其他程序,并且系统中内存资源紧张时,系统就会把那些不被调度的进程相关的代码和数据交换到磁盘当中,此时,内存中这部分的代码和数据就可以被释放了。把进程相关的代码和数据交换到磁盘中去,这时候进程就处于挂起状态。

1、Linux下的进程状态

  • R:运行状态,并不意味着进程一定在运行中,它表明进程要么在运行中,要么是在运行队列里。
  • S:睡眠状态,是一种阻塞状态,意味着进程在等待事件完成
  • D:休眠状态,是一种阻塞状态,也可叫不可中断休眠状态,在这个状态的进程通常会等待IO的结束
  • T:暂停状态,是一种阻塞状态,可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
  • X:死亡状态,是一种终止状态,这个状态只是一个返回状态,不会在任务列表里看到这个状态
  • Z:僵尸状态,也是一种终止状态。

我们可以举个例子来查看R的状态:
我们先创建一个test.c 的文件,进行编写:
在这里插入图片描述
然后对这个代码运行,通过 ps axj | head -n1 && ps ajx | grep test | grep -v grep指令查看进程状态
在这里插入图片描述
我们可以看到并不是处于R状态,我们把代码在改一改呢?
在这里插入图片描述
在这里插入图片描述
此时,进程状态就处于R状态,为什么呢?
因为printf的本质是向外设打印消息,而频繁访问外设,是需要等待的,对于CPU来说,外设速度是非常慢的,而运行就是一瞬间的事情,所以我们一直看到的就是S状态。当注释掉printf时,此时代码中没有任何访问外设资源的代码,只有while循环判断,一直处于计算,所以他在整个调度周期里,只会用CPU里的资源,所以一直处于R状态。

我们可以举个例子来查看T的状态:
在这里插入图片描述
此时,这串代码正在处于运行状态:
在这里插入图片描述

我们使用kill -19 22337指令,使他进入暂停状态。
在这里插入图片描述
我们还可以使用kill -18 22337指令,使他继续运行
在这里插入图片描述

综上所述,我们会看到有的是S+,有的是S状态,为什么呢?
有加号,则是在前端运行,而没有加号,则是在后端运行,而且在后端运行,使用Ctrl + C 杀不掉程序,可以用kill -9 PID 命令杀死程序。

2、两个特殊进程

1、僵尸进程

僵死状态是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。

Linux当进程退出的时候,一般进程不会立刻退出,而是维持一个叫Z的状态,也就是僵尸状态,方便后续父进程读取孩子进程退出的退出结果。
僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。直到读取到退出状态代码,进程就会进入X状态。

我们举个例子,查看僵尸状态:
让子进程退出,父进程正常运行,但是父进程一直不回收
在这里插入图片描述
进入运行,我们可以看到父子进程正在运行
在这里插入图片描述
如果我们把子进程杀死呢?
在这里插入图片描述
我们可以看到子进程就进入Z状态了。

僵尸进程的危害:

  • 进程的退出状态是一直要维持下去的,因为他要告诉父进程,你交给我的任务,我办的怎么样。如果父进程一直不读取,那么子进程就会一直处于僵尸状态
  • 维护退出状态本身就要用数据维护,也就是说退出状态也属于进程的基本信息,所以Z状态一直不退出,PCB就会一直都要被维护。
  • 如果一个父进程创建多个子进程,而一直不回收,就会造成内存资源的浪费,因为数据结构对象本身就要占用内存,就会出现内存泄漏的问题。

2、孤儿进程

父子进程中,父进程先退出,而子进程暂时没有退出,就会被1号进程自动领养,也就是让1号进程成为新的父进程,而1号进程就是操作系统,这就是 孤儿进程。

我们写个代码看看孤儿进程:
在这里插入图片描述
在这里插入图片描述
我们可以看到杀死父进程后,子进程会由前端自动变为后端。此时,我们可以用两种方式杀掉进程:
1、kill -9 PID
2、killall 程序名称

三、进程优先级

进程优先级存在的意义就是CPU资源有限。

  • CPU资源分配的先后顺序,就是指进程的优先权。
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能。
  • 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能

查看系统进程
在linux系统中,用ps –l命令则会类似输出以下几个内容:
在这里插入图片描述

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的nice值

PRI and NI

  • PRI就是进程的优先级,或者说就是程序被CPU执行的先后顺序,此值越小进程的优先级别就越高。
  • NI就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值
  • PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。当nice值为负值的时候,那么PRI(new)值将变小,即其优先级会变高,则其越快被执行。所以,调整进程优先级,在Linux下,就是调整进程nice值
  • nice其取值范围是-20至19,一共40个级别
  • nice值就是进程优先级的修正修正数据

如何更改与存在进程的nice值呢?

先输入top,进入top后,按‘r’,然后输入进程PID,输入nice值。

进程特性:

  • 竞争性:系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。
  • 独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。
  • 并行:多个进程在多个CPU下分别同时进行运行,这称之为并行。
  • 并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差?

山区特殊场景的倾斜摄影三维模型数据出现几何坐标偏差原因,如何修正这些坐标偏差? 山区倾斜摄影三维模型数据出现几何坐标偏差的原因可能有很多,其中一些常见的原因包括不同地图投影系统之间的转换问题、GPS定位误差、测量设备精度问题、摄影…

AI+边缘,是如何加速制造转型的?

在现代工业中,提起智慧工厂、智能制造有一个经久不衰的话题,那便是IT和OT的融合。 IT(Information Technology)部门专注于处理数据,整个业务系统需要它来维持运营。而OT(Operation Technology)…

实战Windows Chrome 0day

遇到挑战跟挫折的时侯,我有一个坚定的信念,我可以断气,但绝不能放弃 漏洞复现 实战Windows Chrome 0day需要满足的条件 第一点是关闭沙箱环境 第一种方式 设置Chrome浏览器的快捷方式 在快捷方式上增加 -no-sandbox 第二种方式 命令行命令…

Studio One6简体中文版全新版本功能详解

Studio One 6是一款强大的音乐编曲软件,可以帮助您使用灵活的和弦轨道功能实现音乐创作。通过新的智能模板、直观的拖放工作流、可定制的用户界面和强大的集成工具,使创建快速而轻松。 无论你选择 Studio One 哪个版本,你都可以得到无限的音轨、通道和插…

微信小程序原生开发功能合集十八:系统主题及自定义主题功能实现

本章实现系统主题监听及相应处理,包括暗黑色、亮色等。并实现自定义主题控制相关功能,可通过菜单进行主题的切换。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: ht…

SpringBoot+Vue 的简历招聘系统

文章目录 1、效果演示2、 前言介绍3、主要技术4 **系统设计**4.1 系统体系结构4.2开发流程设计4.3 数据库设计原则4.4 数据表 5 **系统详细设计**5.1管理员功能模块5.2用户功能模块5.3前台首页功能模块 6、源码获取 1、效果演示 2、 前言介绍 随着科学技术的飞速发展&#xff…

Three.js--》实现3d圣诞贺卡展示模型

目录 项目搭建 初始化three.js基础代码 加载环境模型 设置环境纹理 添加水面并设置阴影效果 实现幽灵小球的运动 实现相机切换和文字切屏 实现漫天星星和爱心样式 今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目…

笔试强训8

作者:爱塔居 专栏:笔试强训 作者简介:大三学生,希望和大家一起进步 day13 一. 单选 1.下列关于视图的说法错误的是: A 视图是从一个或多个基本表导出的表,它是虚表B 视图一经定义就可以和基本表一样被查询…

SSM 如何使用 Redis 实现缓存?

SSM 如何使用 Redis 实现缓存? Redis 是一个高性能的非关系型数据库,它支持多种数据结构和多种操作,可以用于缓存、队列、计数器等场景。在 SSM(Spring Spring MVC MyBatis)开发中,Redis 可以用来实现数…

皮卡丘CSRF

1.CSRF(get) 首先看提示,我们选择用户kobe,密码123456登录 点击修改个人信息,假如用户要把住址改为shanxi 再点击submit,同时用bp抓包,我们可以看到是get请求,数据包含在URL之中 将…

NCI架构-1

1、NFCC和DH通过物理连线相连,物理连线对应为Transport Layer(传输层),支持SPI、I2C、UART、USB等; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment),图左的NFCEE模块可运行一些…

Jetson nano之ROS入门 - - 机器人建模与仿真

文章目录 前言一、URDF建模1. URDF语法详解a. robotb. linkc. joint 2. URDF机器人建模实操 二、Xacro宏优化1、 Xacro宏语法详解2、 Xacro建模实操 三、Rviz与Gazebo仿真1、Gazebo集成URDF建模语法基础2、Gazebo集成URDF实操 总结 前言 在ROS中,机器人建模和仿真是…

Android AIDL Callback的使用(配源码)

零、示例说明 本示例,完成的功能是:客户端向服务端注册一个回调,服务端是一个商店shop,当商店里的产品 Product 有变化时,调用回调向通知客户端,什么商品更新了。 一、完整源代码 完整源码链接: https:/…

solr快速上手:配置从mysql同步数据(五)

0. 引言 上一节我们已经配置了新的索引,但是数据还是手动添加的,并没有实现自动从数据库同步,所以这一节,继续来实现从mysql同步数据到solr solr快速上手:solr简介及安装(一) solr快速上手&a…

[java安全]反射

文章目录 [java安全]反射定义反射的运用1、反射获取类对象1.1、Class.forName()1.2、Object.class1.3、obj.getClass() 2、反射获取成员方法2.1、getMethods()2.2、getDeclaredMethods()2.3、getMethod()2.4、getDeclaredMethod() 3、反射获取构造方法4、反射创建对象4.1、通过…

自动化测试selenium环境搭建

自动化测试工具selenium搭建 1. 自动化和selenium基本概念 1) 什么是自动化?为什么要做自动化? 自动化测试能够代替一部分的手工测试,自动化测试能够提高测试的效率。随着项目功能的增加,版本越来越多,版本的回归测试的压力也…

MySQL架构简介

MySQL是系统架构中最常见的中间件,主要由Server层(连接器Connectors、连接池Connection Pool、查询缓存query cache、分析器Parser、优化器Optimizer、执行器、binlog)以及存储引擎层组成。 MySQL架构简介 连接器 与客户端建立连接、认证身…

论文笔记:Graph neural networks: A review of methods and applications

1 GNN的设计pipeline 1.1 获取图结构 结构化场景 图结构在应用问题中是已知的 比如分子结构、物理系统非结构化场景 图结构在应用问题中是未知的 需要根据任务人为地建图 1.2 判断图的类型 & 尺寸 图的类型 有向图/无向图//异构图/同构图 图中的点和边类型是不是一样的…

LearnOpenGL-高级OpenGL-8.高级GLSL

本人初学者,文中定有代码、术语等错误,欢迎指正 文章目录 高级GLSLGLSL的内建变量在顶点着色器的内建变量gl_PointSizegl_VertexID 在片段着色器的内建变量gl_FragCoordgl_FrontFacinggl_FragDepth 接口块Uniform缓冲对象Uniform块布局使用Uniform缓冲简…

基于QT的智能家居中控系统的简明设计

文章目录 系统总体说明主板UI设计后续改进与完善 系统总体说明 系统采用 “主从式架构” ,即一主多从式,该智能居家控制系统的主要功能包括登录功能、注册功能、音乐播放功能、时间显示、日历显示、温度湿度光照气压海拔数据等环境指标数据显示等。   …