系统对不同进程所分配的CPU时间的多少主要由进程的优先级决定。每一个进程都有自己的优先级都有自己的优先级。静态优先级高的进程会抢占低的进程。对优先级为0的进程将依照其动态优先级来分配运行时间,优先级的值越小,优先权越高。但是对进程执行一定的操作就可以改变其动态优先级。
其操作如下:
#inclde<unistd.h>
int nice(int inc);
#include<sys/time.h>
#include<sys/resouce.h>
int setpriority(int which,int who,int prio);
int getpriority(int which,int eho);
#include<sched.h>
int sched_set_priority_max(int policy);//获取由policy指定的调度策略下优先级的最大值
int sched_set_priority_min(int policy);//获取最小值
int nice(int inc) 改变进程的动态优先级。调用此函数的进程,优先级将被加上参数inc所设的值,inc为正时优先级降低,反之...
root用户调用nice时,inc的值才可以为负。(调用成功时,返回值为0,失败时为-1,将其返回值存放在errno内)
setpriority 设置进程/进程组或用户的动态优先级。
getpriority 获取
which 用于指定所做操作的对象
who 指定函数所要设置优先级的进程
prio 指定进程优先级
调用setpriority成功时,返回值为0,失败时为-1;
调用getpriority成功时,返回值为所有匹配的进程中优先级最小的值,失败时,返回值为-1。
whiich取值
PRIO_PROCESS 设置进程的动态优先级
PRIO_PGRP 设置进程组的动态优先级
PRIO_USER 设置用户的动态优先级
调用getpriority函数时,其返回值是进程的优先级,而一个进程的优先级可能为-1,所以调用getpriority时,如果返回值为-1,并不表示函数的调用失败,需要根据errno的值来确定,所以调用getpriority函数前,应该将errno的值清楚,调用完毕后检查errno的值是否成功。