`

(转)nice值

阅读更多
  首先,我想用一个简单的命令来引起这个议题。 无论在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容:
[root@dbbak root]# ps –l — 这里用的是linux测试
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 20538 20534 0 75 0 – 1063 wait4 pts/2 00:00:00 bash
4 R 0 20663 20538 0 75 0 – 828 – pts/2 00:00:00 ps

我们很容易注意到其中的几个重要信息,有下:
UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值
这里的前面的三个信息,我们都是比较好容易理解的,但是后面的两个奇怪的信息,一个是PRI,一个是NI,这到底是什么东西?相对而言,PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。

进程在创建时并不是平等的,他们被赋予不同的优先级值,例如有些对计算机本身的操作至关重要的程序必须比其他次要的程序具有更高的优先级(则其有更小的优先级值)。而如前面所说,nice的值是表示进程优先级值可被修正数据值,因此,每个进程都在其计划执行时被赋予一个系统nice值,这样系统就可以根据系统的资源以及具体进程的各类资源消耗情况,主动干预进程的优先级值。这个过程,用户也可手工干预其中,但是要被赋予相应的权限。
在UNIX系统或者LINUX系统中,使用从-20到+19的一个可变数值来表示这个nice值(LINUX和AIX是这种情况,HP-UX系统的值范围是从0到39),并且在通常情况下,子进程会继承父进程的系统nice值。具有最高优先级的程序,其nice值最低,所以在UNIX和LINUX系统中,值-20使得一项任务变得非常重要(HP-UX为0);与之相反,如果任务的 nice 为+19(HP-UX为39),则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的 CPU 时间的更大使用份额,这也就是nice的名称的意会来意。

在系统启动的过程中,init进程会被赋予0(HP-UX系统值会被赋予20),其他所有进程继承了这个nice值(因为其他的进程都是init的子进程)。对于用户,从他们开始登陆初始化进程,其余在其底下衍生出来的子进程也会赋予该nice值。原始用户,只能将其底下的执行进程的nice值变大(相对于其本身nice值而言)而不能变小;若想变小,得要有相应的权限,如root用户可以设置变小,如下:
[oracle@perf_dbc ~]$ nice
0
[oracle@perf_dbc ~]$ nice -n 3 ls
agent bin important_bak logs statistics_import.log TMP_FORUM_STATS.dmp TMP_TAOBAO_STATS.dmp TMP_TBCAT_STATS.dmp top.dmp worksh
[oracle@perf_dbc ~]$
[oracle@perf_dbc ~]$ nice -n -3 ls
nice: cannot set priority: Permission denied

而root用户就可以给其子进程赋予更小的nice值,如下:
[root@dbbak root]# nice
0
[root@dbbak root]# nice -n -3 ls
192.168.205.191.txt anaconda-ks.cfg clariion.log Desktop disk1 emc.sh File_sort install.log install.log.syslog log OPS rhel_os_soft root_link_name

对于后台进程,其nice会在其被显示赋予的值过后再加上4。如“nice 12 command &”命令执行时,则其会以nice=36值来运行程序(HP-UX系统)。这里有个问题,即如果用户设置的nice值超过了nice的边界值(LINUX和AIX为-20到19,HP-UX为0到39)会怎样,则系统就取nice的边界值作为进程的nice值。

与进程的nice相关的命令有2个,分别是nice和renice。
nice命令就是设置一个要执行command进程的nice值,其命令格式是 nice –n adjustment command command_option,这里就设置要执行的command的nice,如果这里不指定adjustment,则默认为10。
renice命令就是设置一个已经在运行的进程的nice值,如假设一运行进程本来nice值为0,renice为3后,则这个运行进程的nice值就为3了。renice的执行必须要有相应的权限方可执行。它可以根据用户、进程ID、进程组来设置进程的nice值。

对nice值一个形象比喻,假设在一个CPU轮转中,有2个runnable的进程A和B,如果他们的nice值都为0(如果是HP-UX则为20),加上内核会给他们每人分配1k个cpu时间片。但是假设进程A的为0,但是B的值为-10,那么此时CPU则会可能分别给A和B分配1k和1.5k的时间片。故可以形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高,其优先级值越低。

从使用top、ps等命令看到的nice值,就是进程所拥有的nice值,使用iostat等看到的%nice,就是用户进程空间中改变过优先级的进程的占用CPU的百分比,如上例中就说0.5k/2.5k=1/5=20%。

到目前为止,更需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。
分享到:
评论

相关推荐

    nice-search:#WordPress插件

    尼斯搜索 贡献者:markjaquith 捐赠链接: : 标签:重定向,规范,搜索至少需要:4.0 最高测试:4.2.2 稳定... 尊重自定义$wp_rewrite->search_base值 0.4 正确处理 urlencoded 字符(非英语语言:你想要这个!) 包

    PB-strings-basic-methods

    编程基础:基本的字符串方法 这些练习旨在使您更加熟悉字符串方法以及字符串插值。 将每个练习的结果打印到控制台。 使用终端查看您的结果。 注意:使用唯一的名称声明每个... 检查句子“ nice shoes”是否包含字母l

    pb-strings-basic-methods-andreglock:GitHub Classroom创建的pb-strings-basic-methods-andreglock

    编程基础:基本的字符串方法这些练习旨在使您更加熟悉字符串方法以及字符串插值。 将每个练习的结果打印到控制台。 使用终端查看您的结果。 注意:使用唯一的名称声明每个变量... 检查句子“ nice shoes”是否包含字母l

    设置默认值:一个非常简单的函数,用于初始化调用者函数中的缺失值或空值。-matlab开发

    为了设置变量的默认值,我发现我的函数的开头散落着 如果 nargin < 1 || 空(x) x = 1; 结尾 如果 nargin <... 看http://blogs.mathworks.com/loren/2009/05/05/nice-way-to-set-function-defaults/

    ASP基础到精通教程ppt

    mid(str,start,[length]) 从字符串中间截取子字符串 a=“I am nice” mid(a,3,2) ASP函数定义及调用方法 定义方法: function 函数名([形式参数]) 函数体 函数名=返回值 end function 调用方法: 变量=函数名(...

    Excel新手完全教程

    Very nice。目 录 一、 基本方法 9 1. 快速选中全部工作表 9 2. 快速启动EXCEL 9 3. 快速删除选定区域数据 9 4. 给单元格重新命名 9 5. 在EXCEL中选择整个单元格范围 10 6. 快速移动/复制单元格 10 7. 快速修改单元...

    C++代码设计与重用

    2.3 Nice类 2.4 存在最小标准接口吗 2.4.1 缺省构造函数 2.4.2 赋值运算符 2.4.3 拷贝构造函数 2.4.4 相等运算符 2.4.5 析构函数 2.5 浅拷贝和深拷贝 2.6 接口一致性 2.7 转型 2.7.1 多重所有权...

    博客系统数据库设计.doc

    "是否主"是否为空 "备注 "字段含义 " " " "键 " " " " "user_login "varchar(60) "IND "NULL " "账户名 " "user_pass "varchar(64) " "NULL " "密码 " "user_nicename "varchar(50) "IND "NULL " "用户昵称 " "user_...

    coreutils-8.32.tar.gz

    nice 修改某个进程的调度优先级 nl 把每个指定文件的内容写到标准输出,在每行加上行号 nohup 使某个命令不被挂起,并将输出重定向到一个日志文件。 od 以数字方式显示指定文件的内容,默认为八进制。 paste...

    语言程序设计课后习题答案

    语句if(x == 3)首先判断x的值是否为3,若相等条件表达式的值为ture,否则为false。 2-15 什么叫做作用域?什么叫做局部变量?什么叫做全局变量,如何使用全局变量? 解: 作用域是一个标识符在程序正文中有效的...

    TPFanControl 0.63准绿色版+教程

    // with Active=3 & ManFanSpeed=0 & ManModeExit=78 you can have a nice // quiet time until temps reaches 78 deg. centigrade :-)) // 当使用手动模式(Active=3),风速为0(ManFanSpeed=0),并且将"手动切换到智能...

    linux_c API函数大全

    nice(改变进程优先顺序) 108 11.16 108 on_exit(设置程序正常结束前调用的函数) 108 11.17 109 setpgid(设置进程组识别码) 109 11.18 109 setpgrp(设置进程组识别码) 109 11.19 109 setpriority(设置程序...

    2010年考研英语单词象形记忆法

    her he【他】,r【围绕】→女人是附庸,总是围绕着男人转,所以围绕着他转的是宾格的她,他是她的中心 《注意:现在说明一个最重要的规律:绝大多数的单词的核心意思在于他的第一个字母或第一个辅音字母组合,而后面...

    外文翻译 stus MVC

    This feature allows nice integration into JSP-based development tools that allow authoring with tags. • Tag library Why re-invent the wheel, or a tag library? If you cannot find something you need...

    Solaris系统管理指南:高级管理

    SPARC:对如何设置控制台的$TERM值的更改 ................................................................. 20 系统控制台上由SMF管理的ttymon调用 ..............................................................

Global site tag (gtag.js) - Google Analytics