基础命令学习目录首页

进程调度是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:

nice和renice命令详解的更多相关文章

  1. adb调试命令详解-2016.02.01

    adb(Android Debug Bridge),调试桥可以让设备的调试监测过程在远端进行,而不必在运行实际运行应用的设备上,方便调试的输出. 1 命令详解 a 查看帮助信息         adb ...

  2. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  3. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  4. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  5. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

  6. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. android adb 命令详解

    ADB (Android Debug Bridge)  是android SDK中的工具,需要先配置环境变量才能使用.起调试桥的作用,可以管理安卓设备.(也叫debug工具) ---------查看设 ...

  8. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  9. Top 命令详解

    Top 命令详解 先感受一下top命令的执行结果吧!哈哈-- top - 17:32:34 up 3 days, 8:04, 5 users, load average: 0.09, 0.12, 0. ...

随机推荐

  1. P1004 方格取数

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  2. Hdu4952 - Number Transformation - 数论(2014 Multi-University Training Contest 8)

    寻找1~k内i的倍数.则这个数能够看成i*x,则下一个数为(i+1)*y,(i+1)*y>=i*x,那么能够推出.y=x-x/(i+1); 那么当x<i+1时,y==x.之后的循环也不会改 ...

  3. C语言 有关内存的思考题

    非原创. 今天笔试时候遇到的问题,原文链接见底部. 1 void GetMemory(char *p) { p = (); } void Test(void) { char *str=NULL; Ge ...

  4. SAP查找用户的登录记录

    1.可以使用USR02中有个上次登陆日期和登陆时间. 2.用SE38跑下RSUSR200,输入用户名即可查询上次登陆日期 3.SU10可以查到

  5. 20145207 2016-2017《Java程序设计》课程总结

    20145207 2016-2017<Java程序设计>课程总结 目录 一.每周作业及实验报告链接汇总 二.关于博客 自认为写得最好一篇博客是?为什么? 作业中阅读量最高的一篇博客是?谈谈 ...

  6. WPF 学习笔记-在WPF下创建托盘图标

    原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...

  7. BZOJ1068_压缩_KEY

    题目传送门 区间DP,设f[i][j][0/1]为i~j区间的压缩情况,1表示在插入了一个M. code: /********************************************* ...

  8. 10.30 开课一个月零二十六天 (PHP数据库修改)

    1.先做一个修改页面 <body> <!--这个页面需要让用户看到一些数据,所以不是一个纯php页面,页面效果和增加页面的效果非常相似,直接把增加页面的代码复制过来--> &l ...

  9. javaweb 报表生成(pdf excel)所需要用到的技术和思路

    pdf: “ 目前开源.成熟.稳定的第三方包只有iText.而用iText生成PDF有三种方式: 调用iText API,用代码“写”出PDF,依赖包:com.itextpdf:itextpdf:5. ...

  10. 异常 java.lang.NullPointerException at org.apache.jsp.index_jsp._jspService(index_jsp.java:124)

    这是jsp报的异常 jsp代码: <% String LoginUsername = ""; String LoginPassword = ""; try ...