nice的值范围-20~19(数字越小,优先级越高)
//获取和修改优先级
#include<sys/resource.h>
//which参数确定who参数如何被解释,该值取值如下
PRIO_PROCESS 操作进程id为who的进程,如果who为0,使用调用者的进程id
PRIO_PGRP 操作进程组id为who的进程组的所有成员,如果who为0,那么使用调用者的进程组
PRIO_USER 操作所有真实有胡id为who的进程,如果who为0,使用调用者的真实用户id
int getpriority(int which,id_t who); //可能在成功返回时返回-1,所以调用之前将errno设置为0,接着检查调用后返回值为-1并且errno不为0才能确认调用成功
int setpriority(int which,id_t who ,int pro); //pro如果超出nice返回,直接设置nice为边界值
//SCHED_RR策略
//优先级相同的进程以循环时间分享的方式执行,进程每次使用cpu的时间是一个固定长度的时间片
//高优先级进程总是优先于低优先级进程
//SCHED_FIFO策略
//先进先出,不存在时间片,一旦一个SCHED_FIFO进程获取cpu控制权之后,她就会一直执行,直到自动放弃cpu或者终止或者被一个优先级更高的进程抢占了
//实现优先级范围,返回一个调度策略的优先级取值范围
#include<sched.h>
int sched_get_priority_min(int policy);
int sched_get_priority_max(int policy);
//policy指定需获取哪种调度策略的信息,这个参数一般是SCHED_RR或者SCHED_FIFO
//修改调度策略和优先级
int sched_setscheduler(pid_t pid,int policy,const struct sched_param *param);//如果pid为0,那么将修改调用进程的特性
struct sched_param{
//指定调度策略,对于SCHED_RR和SCHED_FIFO来说,这两个字段取值必须位于sched_get_priority_min()和sched_get_priority_max()规定的范围内
//对于其它策略来讲,优先级必须为0
int sched_priority;
};
//修改一个进程的调度策略优先级
int sched_setparam(pid_t pid,const struct sched_param *param);
//获取进程的调度策略和优先级
int sched_getscheduler(pid_t pid);
int sched_getparam(pid_t pid,struct sched_param *param);
//释放cpu
//如果存在与调用进程的优先级相同的其他排队的可运行进程,那么调用进程会被放在队列的队尾,队列中队头的进程将会被调度使用cpu
int sched_yield(void);
//找出SCHED_RR进程在每次被授权使用cpu时分配到的时间片的长度
int sched_rr_get_interval(pid_t pid,struct timespec *tp);
//设置pid制定的进程的cpu亲和力,如果pid为0,那么调用进程的cpu亲和力就会被改变
int sched_setaffinity(pid_t pid,size_t len,cpu_set_t *set);
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(1,&set);
CPU_SET(2,&set);
CPU_SET(3,&set);
sched_setaffinity(pid,CPU_SETSIZE,&set);
//获取pid指定的进程的cpu亲和力掩码,如果pid为0,那么就返回调用进程的cpu亲和力掩码
int sched_getaffinity(pid_t pid,size_t len,cpu_set_t *set);