nice和renice命令详解

article/2025/10/3 20:52:56

 

进程调度是linux中非常重要的概念。linux内核有一套高效复杂的调度机制,能使效率极大化,但有时为了实现特定的要求,需要一定的人工干预。比如,你希望操作系统能分配更多的CPU资源给浏览器进程,让浏览速度更快、更流畅,操作体验更好。那具体应该怎么做呢?尽管linux的进程调度算法十分复杂,但都是以进程的优先级为基础的。因此,只需要改变进程的优先级即可。

在linux中,nice命令用于改变进程的优先级。

nice命令?什么鬼?哪有命令直接说自己“nice”的?咋一看,这个名字确实很“nice”,只是这里的“nice”是指“niceness”,即友善度、谦让度。用于进程中,表示进程的优先级,也即进程的友善度。niceness值为负时,表示高优先级,能提前执行和获得更多的资源,对应低友善度;反之,则表示低优先级,高友善度。

nice命令格式:nice [OPTION] [COMMAND [ARG]...]

当nice没有选项时,输出值表示系统进程缺省的niceness值,一般为0。

xie@xie-VirtualBox:~$ nice
0

nice命令中没有给出具体的niceness值时,默认为10。如nice vi设置vi进程的niceness为10。

回到顶部

-n 选项

-n选项后面跟具体的niceness值。niceness值的范围-20~19,小于-20或大于19的值分别记为-20和19。

xie@xie-VirtualBox:~$ nice -n 10 vi&

该命令设置vi进程的niceness值为10,也就是较低的优先级。

如果设置的niceness值为负,那么必须要有管理员权限。这也不难理解,当niceness为负时,意味着该进程要抢占其他进程的资源,必须要有权限才行;如果niceness为正,即表示谦让度高,这对其他进程来说是喜闻乐见的,也当然就不用权限认证了。

可以通过ps -l查看进程的niceness值。

xie@xie-VirtualBox:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY  TIME CMD
0 S  1000  1635  1634  0  80   0 -  2178 wait   pts/13   00:00:00 bash
0 T  1000  1677  1635  0  90  10 -  1767 signal pts/13   00:00:00 vi
0 R  1000  1678  1635  0  80   0 -  1606 -  pts/13   00:00:00 ps

NI列即表示进程的niceness值。vi进程对应的NI值正好为刚设置的10。那PRI列又是什么呢?PRI表示进程当前的总优先级,值越小表示优先级越高,由进程默认的PRI加上NI得到,即PRI(new) = PRI(old) + NI。由上程序,进程默认的PRI是80,所以加上值为10的NI后,vi进程的PRI为90。
所以,需要注意的是,NI即niceness的值只是进程优先级的一部分,不能完全决定进程的优先级,但niceness值的绝对值越大,效果越显著。

回到顶部

--adjustment=N 选项

--adjustment选项和-n选项的效果是一样的,在等号右边设置对应的niceness值即可。

xie@xie-VirtualBox:~$ nice --adjustment=16 vi&
[1] 1681
xie@xie-VirtualBox:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY  TIME CMD
0 S  1000  1635  1634  0  80   0 -  2178 wait   pts/13   00:00:00 bas
0 T  1000  1681  1635  0  96  16 -  1767 signal pts/13   00:00:00 vi
0 R  1000  1682  1635  0  80   0 -  1606 -  pts/13   00:00:00 ps

注意,直接使用“-N”也可以设置niceness值。比如,nice -12 vi& 将vi的niceness值设置为12,如果是nice --12 vi&的话,则设置niceness的值为-12。这很容易混淆,建议使用-n或--adjustment选项,不易出错。

回到顶部

其他选项

--help       显示帮助信息
--version 显示版本信息

回到顶部

renice命令

以上讨论的都是为即将运行的进程设置niceness值,而renice用于改变正在运行的进程的niceness值。

renice,字面意思即重新设置niceness值,进程启动时默认的niceness值为0,可以用renice更新。

renice语法:renice [优先等级][-g<程序群组名称>...][-p<程序识别码>...][-u <用户名称>...]

如:

renice -5 -p 5200  #将PID为5200的进程的niceness设为-5
renice -5 -u xie   #将属于用户xie的进程的niceness设为-5
renice -5 -g group1 #将属于group1组的程序的niceness设为5



作者:Rabin_xie
链接:https://www.jianshu.com/p/fd3dec3cd393
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

命令:nice

参数:

-n ,--adjustment=N 两个参数含义相同,设置进程优先级的谦让值(修正值)为N

示例:

nice -n -10 ws_gw 

设置进程ws_gw的优先级的修正值为-10

nice -19 ws_gw

已优先级19来启动ws_gw,此时-不标识负数,而表示参数指令,已19优先级来启动;

作用:

 nice命令以更改过的优先序来执行程序,如果未指定程序,则会印出目前的排程优先序,内定的 adjustment 为 10,范围为 -20(最高优先序)到 19(最低优先序)。

--------也就是说要在启动时,在启动命令前加上 nice xx command才能生效;

例如: nice -10  ./aaa ../conf/aa.xml 

--------./aaa ../conf/aa.xml 为正常启动命令,nice -10 即已修正值为-10来启动aaa

修正值的用法,进程真正的优先级=进程默认优先级+修正值(nice值)

PRI(real) = PRI(old) + NI

所以为负值则优先级越高,为正值优先级越低

其他说明:

top时进程信息字段的ni值即为修正值;最低为19,所以下图的20最终为19

已19优先级启动vi

 已正常优先级启动vi

 

 已修正值-10启动vi:

 

 


http://chatgpt.dhexx.cn/article/e1P0xc9r.shtml

相关文章

Reactor

Reactor 初识Reactor ! ! Reactor讲解 Reactor&#xff1a;响应式编程&#xff0c;区别于一般&#xff1a;Client去询问Server是否有变化并拉取数据的模式&#xff0c;响应式编程是后台有数据变化时主动push给订阅者&#xff0c;也就是Publisher-Subscriber模型。 一、特点…

得到c++程序Process ID [getpid()], 调高CPU优先级 [renice]

1. 得到进程ID - pid #include <unistd.h> int pid (int)getpid();std::cout<<"pid: "<<getpid()<<"\n"; C 打印pid和tid_shuai_wow的博客-CSDN博客_c 打印pid获取pid1. 包含头文件#include <unistd.h>2. 在需要打印pid的…

RN(React Native)

RN是React的原生组件库 网址:React Native 中文网 使用React来编写原生应用的框架 一、ReactNative开发环境的搭建 在本机搭建RN项目开发运行环境 —— 3GB ①安装必需的编译软件&#xff1a;Node.js JDK ②安装Android原生App开发软件 —— Android Studio ③使用Android开…

优化Linux系统性能的必杀技:调整进程优先级!学会使用nice命令,让你的系统飞一般的顺畅!

文章目录 前言一. nice命令介绍1.1 nice的介绍1.2 cpu资源的调度1.3 nice是控制内核吗&#xff1f; 二. 语法格式及常用选项三. 参考案例3.1 将ls命令的优先级调整为最高3.2 将 find 命令的优先级调整为最低3.3 如何查看nice值 四. nice和renice的区别总结 前言 大家好&#x…

Linux nice及renice命令使用

Linux nice及renice命令使用 引言: linux内核是一个了不起的马戏表演者,它在进程和系统资源之间小心地玩着杂耍,并保持系统的正常运转。同时,内核也很公平,它将资源公平地分配给各个进程。但是,如果用户需要给一个重要进程提高优先级、或是降低优先级,该怎么办呢?答案是…

Linux进程监测和操控之top、ps、kill、nice、renice命令

文章目录 1、概述2、动态监测进程信息&#xff1a;top命令2.1、Linux系统的整体情况2.2、Linux进程的情况2.3、监控指定进程 3、静态查看进程信息&#xff1a;ps命令3.1、查看进程的资源占用3.2、查看父进程ID3.3、查看指定进程的内存占用 4、结束进程5、进程优先级5.1、启动程…

linux的nice 命令和renice命令

二者没有太大的区别&#xff0c;都是用于改变进程的优先级&#xff0c;所谓的优先级就是谁有更大的机会先执行&#xff0c;那么为什么要有nice这个命令呢&#xff1f;nice”是指“niceness”&#xff0c;即友善度&#xff0c;所以这个值越小的话&#xff0c;比如-10&#xff0c…

Linux 中的 renice 命令详解及C/C++代码实现

Linux 中的 nice 命令有助于执行具有修改的调度优先级的程序/进程。 它启动具有用户定义的调度优先级的进程。 如果我们给一个进程更高的优先级&#xff0c;那么内核会为这个进程分配更多的 CPU 时间。 而 renice 命令允许您更改和修改已运行进程的调度优先级。 什么是进程 …

Java之throw和throws的区别

throw和throws的区别 共同点区别总结 共同点 两者在抛出异常时&#xff0c;抛出异常的方法并不负责处理&#xff0c;顾名思义&#xff0c;只管抛出&#xff0c;由调用者负责处理。 区别 &#xff08;1&#xff09;throws用于方法头&#xff0c;表示的只是异常的申明&#xf…

Throw和Throws详解

Throw和Throws详解 ​ 1.throw是什么&#xff1f;有什么用&#xff1f; ​ throw是java中关于异常的一种操作&#xff0c;如果在try{}catch{}中使用了throw&#xff0c;就代表自己书写的这个方法&#xff0c;可以自己 处理异常了&#xff0c;就是抛出的一个动作&#xff0c;可…

Java异常:throw 和 throws的区别

throws&#xff1a;用来声明一个方法可能抛出和所有异常的信息&#xff0c;表现出现异常的可能性&#xff0c;但并不一定会发生异常。&#xff08;可以理解为为了预防异常的出现&#xff0c;而用throws提前声明一下&#xff09; throw&#xff1a;指抛出的一个具体的异常类型&…

Throws和Throw的区别?

在初学Java异常时&#xff0c;总是被throws和throw搞晕&#xff0c;今天来理一下它们之间的关系。 1、throws 方法名后面跟上 throws Exception 证明这个方法里的语句可能会发生异常&#xff0c;注意是可能&#xff01;在别处如果调用这个方法时&#xff0c;就必须也抛出异常…

再探java基础——throw与throws

再探java基础——throw与throws 以前虽然知道一些异常的处理&#xff0c;也用过一些&#xff0c;但是对throw和throws区别还是有不太清楚。今天用实例测试一下。 异常处理机制 异常处理是对可能出现的异常进行处理&#xff0c;以防止程序遇到异常时被卡死&#xff0c;处于一…

try catch 和throw以及throws的使用

转载&#xff1a;https://www.cnblogs.com/zhangdaicong/p/6127984.html try-catch和throw,throws的区别 java里的异常多种多样&#xff0c;这是一种非常有用的机制&#xff0c;它能帮助我们处理那些我们未知的错误&#xff0c;在java里&#xff0c;关于异常的有throw throws…

Java异常之throw,throws和Throwable

Java异常处理中有throw开头的三兄弟&#xff0c;分别是throw,throws以及Throwable&#xff0c;那么他们之间到底怎么区分呢&#xff0c;且听我慢慢道来。 Throwable Throwable是一个类&#xff0c;该类被异常类Exception以及错误类Error继承&#xff0c;其主要结构如下&#…

Java throws 使用

在开发中&#xff0c;如果去调用别人写的方法时&#xff0c;是否能知道别人写的方法是否会发生异常&#xff1f;这是很难判断的。针对这种情况&#xff0c;Java总允许在方法的后面使用throws关键字对外声明该方法有可能发生异常&#xff0c;这样调用者在调用方法时&#xff0c;…

【JavaSE】throws 异常处理

文章目录 1. 基本介绍2. 快速入门案例3. 注意事项和使用细节 1. 基本介绍 如果一个方法(中的语句执行时)可能生成某种异常&#xff0c;但是并不能确定如何处理这种异常&#xff0c;则此方法应显示地声明抛出异常&#xff0c;表明该方法将不对这些异常进行处理&#xff0c;而由…

throws异常

在程序开发过程中&#xff0c;程序员会尽量避免错误的发生&#xff0c;但是总会发生一些不可预测的事情&#xff0c;例如除法运算时除数为0 、内存不足、栈溢出等&#xff0c;这些就是异常&#xff0c;java语言提供了异常的处理机制&#xff0c;处理一些不可预期的事情。 使用t…

Elasticsearch之利用bulk提高写入性能(含源码分析)

什么是bulk操作 bulk是批量的意思&#xff0c;也就是把原来单个的操作打包好&#xff0c;通过批量的api提交到ES集群。下面是个示例&#xff1a; 单个操作&#xff1a; PUT my-index-000001/_doc/1 {"timestamp": "2099-11-15T13:12:00","message&…

.NET5必备工具——EF大数据批量处理----Bulk系列

之前做项目的时候&#xff0c;如果在大批量操作数据时,性能不好.因为在框架中使用了EntityFramework&#xff0c;于是就搜索到某著名插件,Z系列。 1.安装 然后在类里面添加引用之后,使用DbContext就可以直接点出来。 2.博客园有人做过对比试验 我们直接拿数据说话吧. EF传统…