提高进程的优先级
进程优先级概念

如上图:应用程序wim-rudp有两个重要的参数
PRI:80
NI:0
进程的真正优先级为
PRI = PRI(old) + NI
注意:
PRI范围:【60~99】
NI范围:【-20~19】
且上面公式中提到的
PRI(old)值,是程序启动的时候值,并不是上次的值,例如old一直是上图中的80。
进程优先级队列

如何调整进程优先级
方案1:直接top命令下修改
sudo top命令按下【R/r】键,会显示下面的提示
PID to renice [default pid = x]
输入我们的进程PID:
151190
输入要修改的NI值:我们这里输入-20

查看调整后的进程优先级

方案2:renice命令修改
renice -n <nice值> -p <进程ID>
例如下面的
renice -n -10 -p 151190
如下图所示:

方案3:Linux C代码修改
在wim-rudp代码中修改
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
// Highest nice value, -20 to 19
int set_nice(int who,int niceval)
{
int ret = setpriority(PRIO_PROCESS, who, niceval);
if (ret == -1) {
perror("setpriority");
return -1;
}
printf("Nice value set to %d\n", niceval);
return 0;
}
函数介绍
#include <sys/resource.h>
int setpriority(int which, int who, int priority);
which参数指定是要修改进程、进程组、用户的优先级:PRIO_PROCESS:修改进程的优先级。PRIO_PGRP:修改进程组的优先级。PRIO_USER:修改用户的默认优先级。
who参数指定是要修改当前进程、进程ID为who的进程、进程组ID为who的进程组或者用户ID为who的所有进程。priority参数是优先级值,范围通常是-20到19,数值越小表示越高的优先级。返回值:成功时返回0,失败时返回-1并设置
errno。
获取进程优先级函数:
#include <sys/resource.h>
int getpriority(int which,int who);
函数说明 getpriority()可用来取得进程、进程组和用户的进程执行优先权。
参数 which有三种数值,参数who 则依which值有不同定义
PRIO_PROCESS:who 为进程识别码PRIO_PGRP: who 为进程的组识别码PRIO_USER:who 为用户识别码
此函数返回的数值介于-20 至19,代表进程执行优先权,即NI值