Linux进程优先级

进程优先级,进程nice值

进程cpu资源分配就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。
top或者ps命令会输出PRI/PRNI`%nice这三种指标值,这些到底是什么东西?先给出大概的解释如下:
PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行;
NI :进程Nice值,代表这个进程的优先值;
%nice :改变过优先级的进程的占用CPU的百分比 (呵呵,这句好难理解是吧,不急慢慢来^_^).

在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和renice
对非root用户,只能将其底下的进程的nice值变大而不能变小。若想变小,得要有相应的权限。对root用户,可以给其子进程赋予更小的nice值。
①一开始执行程序就指定nice值:nice
linux nice 命令详解
功能说明:设置优先权。
语  法:nice [-n <优先等级>][--help][--version][执行指令]
补充说明:nice指令可以改变程序执行的优先权等级。
参  数:-n<优先等级>-<优先等级>–adjustment=<优先等级> 设置欲执行的指令的优先权等级,如果这里不指定adjustment,则默认为10。等级的范围从-20到19,其中-20最高,19最低,只有系统管理者可以设置负数的等级。
–help 在线帮助。
–version  显示版本信息。
②调整已存在进程的nice:renice

renice -5 -p 5200
//PID为5200的进程nice设为-5`

linux renice 命令详解
功能说明:调整优先权。
语  法:renice [优先等级][-g <程序群组名称>...][-p <程序识别码>...][-u <用户名称>...]
补充说明:renice指令可重新调整程序执行的优先权等级。预设是以程序识别码指定程序调整其优先权,您亦可以指定程序群组或用户名称调整优先权等级,并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20到19,只有系统管理者可以改变其他用户程序的优先权,也仅有系统管理者可以设置负数等级。
如果用户设置的nice值超过了nice的边界值(LINUX为-20到+19),系统就取nice的边界值作为进程的nice值。
参  数:
-g <程序群组名称>  使用程序群组名称,修改所有隶属于该程序群组的程序的优先权。
-p <程序识别码>  改变该程序的优先权等级,此参数为预设值。
-u <用户名称>  指定用户名称,修改所有隶属于该用户的程序的优先权。
③也可以用top命令更改已存在进程的nice:

top
#进入top后按“r”–>输入进程PID–>输入nice值

关于top命令的说明,可以参考这篇文章:
linux top命令详解

僵尸进程和孤儿进程

僵尸进程:一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程将会导致资源浪费,而孤儿则不会。

参考文章:
linux进程优先级、进程nice值
进程优先级,进程nice值和%nice的解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值