当前位置: 首页 > news >正文

【Linux】进程(4):优先级

大家好,我是苏貝,本篇博客带大家了解Linux的进程(4):优先级,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


目录

  • (A)什么是优先级
  • (B) 为什么要有优先级
  • (C) Linux的优先级的特点&&查看方式
    • 1. renice命令
    • 2. top命令

(A)什么是优先级

优先级是指定进程获取某种资源(如CPU)的先后顺序

一个进程有一个task_struct结构体,所以里面有许多内部字段,内部字段中存在几个与优先级有关的数据(如:int prio=?)

Linux中优先级数字越小,优先级越高

(B) 为什么要有优先级

进程访问的资源(如CPU)始终都是有限的,而系统中大部分情况下进程都是较多的,所以要存在优先级

操作系统关于调度和优先级的原则:分时操作系统(采用时间片轮转)

分时操作系统能保证基本的公平(每个进程一次最多只能被CPU调度一个时间片的时间,超过则被操作系统剥离出CPU,让其它进程被调度)。如果进程长时间不被调度,就会造成饥饿问题,在用户层面就觉得进程卡住了

(C) Linux的优先级的特点&&查看方式

先写出.c文件
在这里插入图片描述

编译运行,用ps -al查看进程信息
在这里插入图片描述

其中,PRI:进程优先级(Linux中进程的默认优先级是80
NI:进程优先级的修正数据,nice值。

新的优先级=优先级+nice ,达到对于进程优先级动态修改的过程。但是nice并不能任意设置,而是有范围的,范围:[ -20,19](40个数据) 。如果nice>0,优先级数字变大,优先级越低;nice<0,优先级数字变小,优先级越高。

现在我们来试试动态修改进程的优先级

1. renice命令

renice nice -p pid

renice命令在Linux中用于修改已经运行的进程的优先级,且修改的是修正数据nice。
在这里插入图片描述

运行进程,进程一开始的优先级=80,nice=0;修改nice=40(超出范围,只能取19),新的优先级=优先级+nice=99

2. top命令

先运行进程,再执行top命令
在这里插入图片描述

出现上图后,直接按r,出现下面图片内容
在这里插入图片描述

按下想要修改优先级进程的pid,输入后会让我们输入想要修改的nice值
在这里插入图片描述

我们输入40,再按q退出top进程。再用ps -al查询进程的优先级,如我们所想的那样,99=80+19
在这里插入图片描述

上面是让nice>0,优先级数字变大,优先级变低。下面我们让nice<0,即优先级变高。注意:只有root能让nice<0,普通用户只能让nice>0

如果用普通用户:让nice=-10,最后会报错
在这里插入图片描述

我们用root来修改,从普通用户到root,只需要su -,然后输入root的密码。
执行top进程,再r,再输入想修改优先级进程的pid,输入nice值=-10,退出top进程(按q)

在这里插入图片描述

用ps -al查询进程的优先级
在这里插入图片描述

咦,为什么是70呢?不应该是99-10=89吗?事实上,每次调整优先级,都是从80开始的。也就是说,如果我们继续将nice设为10,那么优先级=80+10=90


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

相关文章:

  • 论文笔记:Image Anaimation经典论文-运动关键点模型(Monkey-Net)
  • linux系统上shell脚本编写问题总结
  • 【ES】docker安装ES7.14.0+es-head
  • 通过SpringCloudGateway中的GlobalFilter实现鉴权过滤
  • 代码随想录第23天|回溯part3 组合与分割
  • 微服务学习Day8-Sentinel
  • Flink搭建
  • 【LeetCode】二叉树oj专题
  • elementplu父级页面怎么使用封装子组件原组件的方法
  • 【距离四六级只剩一个星期!】刘晓艳四级保命班课程笔记(2)(可分享治资料~)
  • 前端 html格式转md格式插件使用介绍
  • 解决JSON.stringify 方法在序列化 BigInt 类型时的错误
  • ardupilot开发 --- 机载计算机-软件方案 篇
  • 基于单片机的超声波倒车雷达设计
  • 汇舟问卷:国外问卷调查怎么样?
  • Android系统模拟器绘制实现概述
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • bearychat的java client
  • CEF与代理
  • ES6系统学习----从Apollo Client看解构赋值
  • Facebook AccountKit 接入的坑点
  • Gradle 5.0 正式版发布
  • JavaScript-Array类型
  • NSTimer学习笔记
  • OSS Web直传 (文件图片)
  • Vue 重置组件到初始状态
  • vue脚手架vue-cli
  • 阿里云Kubernetes容器服务上体验Knative
  • 分布式任务队列Celery
  • 聊聊flink的BlobWriter
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序01:wepy框架整合iview webapp UI
  • 学习笔记TF060:图像语音结合,看图说话
  • 用简单代码看卷积组块发展
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #include
  • #微信小程序:微信小程序常见的配置传值
  • $forceUpdate()函数
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (动态规划)5. 最长回文子串 java解决
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (循环依赖问题)学习spring的第九天
  • (转)ObjectiveC 深浅拷贝学习
  • .axf 转化 .bin文件 的方法
  • .bashrc在哪里,alias妙用
  • .NET : 在VS2008中计算代码度量值