本文给出设置进程nice值的示例,该示例在ubuntu上测试。注意需要有额外设置:1、在配置文件/etc/security/limits.conf中增加一项(root hard nice -20);2、测试时使用root权限。
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <errno.h>
#include <unistd.h>
int main()
{
struct rlimit rlim = { 0 };
int ret;
ret = getrlimit(RLIMIT_NICE, &rlim);
if(ret < 0) {
perror("getrlimit");
return -1;
}
printf("cur: %ld, max: %ld\n", rlim.rlim_cur, rlim.rlim_max);
printf("set rlimit...\n");
rlim.rlim_cur = 40;
ret = setrlimit(RLIMIT_NICE, &rlim);
if(ret < 0) {
perror("setrlimit");
return -1;
}
printf("get rlimit...\n");
ret = getrlimit(RLIMIT_NICE, &rlim);
if(ret < 0) {
perror("getrlimit");
return -1;
}
printf("cur: %ld, max: %ld\n", rlim.rlim_cur, rlim.rlim_max);
printf("get priority...\n");
errno = 0;
ret = getpriority(PRIO_PROCESS, 0);
if(errno < 0) {
perror("getpriority");
return -1;
}
printf("nice: %d\n", ret);
printf("set priority...\n");
ret = setpriority(PRIO_PROCESS, 0, -20);
if(ret < 0) {
perror("setpriority");
return -1;
}
printf("get priority...\n");
errno = 0;
ret = getpriority(PRIO_PROCESS, 0);
if(errno < 0) {
perror("getpriority");
return -1;
}
printf("nice: %d\n", ret);
while(1) {
sleep(1);
}
return 0;
}
运行结果:
cur: 0, max: 40
set rlimit...
get rlimit...
cur: 40, max: 40
get priority...
nice: 0
set priority...
get priority...
nice: -20