进程优先级,进程nice值和%nice的解释

用top或者ps命令会输出PRI/PR、NI%ni/%nice这三种指标值,这些到底是什么东西?先给出大概的解释如下:

PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行

NI :进程Nice值,代表这个进程的优先值

%nice :改变过优先级的进程的占用CPU的百分比 (呵呵,这句好难理解是吧,不急慢慢来^_^)

PRI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。由此看出,PR是根据NICE排序的,规则是NICE越小PR越前(小,优先权更大),即其优先级会变高,则其越快被执行。如果NICE相同则进程uid是root的优先权更大。

在LINUX系统中,Nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具有最高优先级的程序,其nice值最低,所以在LINUX系统中,值-20使得一项任务变得非常重要;与之相反,如果任务的nice为+19,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的CPU时间的更大使用份额,这也就是nice的名称的来意。

进程在创建时被赋予不同的优先级值,而如前面所说,nice的值是表示进程优先级值可被修正数据值,因此,每个进程都在其计划执行时被赋予一个nice值,这样系统就可以根据系统的资源以及具体进程的各类资源消耗情况,主动干预进程的优先级值。在通常情况下,子进程会继承父进程的nice值,比如在系统启动的过程中,init进程会被赋予0,其他所有进程继承了这个nice值(因为其他进程都是init的子进程)。

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

由此可见,进程nice值和进程优先级不是一个概念,但是进程nice值会影响到进程的优先级变化。

进程的nice值是可以被修改的,修改命令分别是nice和renice。

1、nice命令就是设置一个要执行command进程的nice值,其命令格式是 nice –n adjustment command command_option,如果这里不指定adjustment,则默认为10。

2、renice命令就是设置一个已经在运行的进程的nice值,假设一运行进程本来nice值为0,renice为3后,则这个运行进程的nice值就为3了。

说明:如果用户设置的nice值超过了nice的边界值(LINUX为-20到+19),系统就取nice的边界值作为进程的nice值。

举例如下:

对非root用户,只能将其底下的进程的nice值变大而不能变小。若想变小,得要有相应的权限。

[[email protected]_dbc ~]$ nice

0

[[email protected]_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

[[email protected]_dbc ~]$ nice -n -3 ls

nice: cannot set priority: Permission denied

对root用户,可以给其子进程赋予更小的nice值。

[[email protected] root]# nice

0

[[email protected] 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

同样,renice的执行也必须要有相应的权限方可执行。

时间: 2024-10-05 12:24:04

进程优先级,进程nice值和%nice的解释的相关文章

【Linux】进程优先级、进程nice值和%nice

用top或者ps命令会输出PRI/PR.NI.%ni/%nice这三种指标值,这些到底是什么东西?先给出大概的解释如下: PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行; NI :进程Nice值,代表这个进程的优先值; %nice :改变过优先级的进程的占用CPU的百分比. PRI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高.那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数

进程与线程的一个复杂解释

关于进程和线程,面试的时候被问了两次都没有答出来.第一次问完稍微看了下概念,并没有完全理解所以也没有记住,所以第二次被问到的时候也没回答出来o(╯□╰)o.. 所以这次把这个问题彻底解决一下. 标题是模仿阮一峰大大的"进程与线程的一个简单解释",见http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html,里面比喻得很形象. 定义 进程(英语:process),是计算机中已运行程序的实体.进程为曾经是分时系统的基本

Linux下查看进程的命令输出的内容解释

ps (process status) ps -e 或者ps -A (-e和-A完全一样) PID           TTY         TIME     CMD ps -ef UID          PID            PPID           C                    STIME                 TTY                 TIME             CMD ps -lf F S UID        PID  PPID

[软考]挣值管理EVM详细解释及应用,实例讲解收集(信息系统项目管理师-成本管理)

开场白 由于最近工作很忙,挣值管理这部分早就看完了,就是没有时间整理,今天抽出时间整理好了发出来和大家一起学习.这里要记住英文缩写的意义及公式,注意实例中的问题使用哪个公式来解决,可以自己再多找些练习,熟能生巧. 文章由简入繁,由浅入深,再加上自己的理解,其中难免有纰漏,若路过此处的同行发现错误或有更好的解题思路,请不吝赐教. 挣值管理(Earned ValueManagement,EVM)项目的挣值管理是用与进度计划.成本预算和实际成本相联系的三个独立的变量,进行项目绩效测量的一种方法.它比较

进程与线程的一个简单解释(转)

进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工.背后的含义就是,单个CPU一次只能运行一个任务. 3. 进程就好比工厂的车间,它代表CPU所能处理的单个任务.任一时刻,CPU总是运行一个进程,其

Linux进程优先级和nice值

在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹 这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识 我们可以通过ps -l看到当前正在运行的进程的详细信息其中 F:表示进程旗标,标识进程所拥有的权限,当我切换到root的时候为4表示拥有root权限,为1仅有fork()权限 R:表示进程当前的状态 R:当前正在运行(RUNNING) S:睡眠(SLEEP) D:不可中断 T:停止(STOP) Z:僵尸进程(ZOMBIE) UID:拥有该进程用户的用户ID PID:进程

进程与线程的一个简单解释

作者: 阮一峰 日期: 2013年4月24日 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工.背后的含义就是,单个CPU一次只能运行一个任务. 3. 进程就好比工厂的车间,它代表CPU所能处理的

Delphi 使用CreateProcess创建进程并弹出进程PID值

var  ExeName:PChar;  StartupInfo:TStartupInfo;  ProcessInfo:TProcessInformation;begin  FillChar(ProcessInfo,sizeof(TProcessInformation),0);  FillChar(StartupInfo,Sizeof(TStartupInfo),0);  StartupInfo.cb:=Sizeof(TStartupInfo);  StartupInfo.dwFlags:=ST

网上看来的:进程与线程的一个简单解释《转载》

原文作者: 阮一峰  发布时间: 2013-05-07 19:28 http://kb.cnblogs.com/page/176246/ 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工.背后的含