通过系统调用nice改变进程优先级
来源:互联网 发布:mac usb耗电量大 编辑:程序博客网 时间:2024/05/16 23:56
问题提出:为什么用nice系统调用降低进程优先级不成功
nice系统调用
nice函数声明:#include<unistd.h>
int nice(int increment);
nice系统调用包含getpriority和setpriority这两个函数
getpriority函数和setpriority函数
函数声明:#include<unistd.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int prio);
nice系统调用是它们的一种组合形式:
int nice(int increment)
{
int oldpro = getpriority(PRIO_PROCESS, getpid());
return setpriority(PRIO_PROCESS, oldpro+increment);
}
示例:
#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<unistd.h>#include<sys/resource.h>#include<sys/wait.h>#include<errno.h>int main(int argc,char *argv[]){ pid_t pid; int stat_val = 0; int oldpri; int newpri; pid = fork(); switch(pid) { case 0 : printf("子进程正在运行,当前pid:%d, 父进程pid:%d\n", pid, getppid()); oldpri = getpriority(PRIO_PROCESS, 0); printf("old priority = %d\n", oldpri); newpri = nice(-6); //newpri = nice(6); printf("new priority = %d\n", newpri); exit(0); case -1 : perror("进程创建失败"); break; default : printf("父进程正在运行, 当前进程的pid:%d, 子进程的pid:%d\n", getpid(), pid); break; } wait(&stat_val); exit(0);}
代码执行结果:
[dela@server1 dela_c]$ ./a.out父进程正在运行, 当前进程的pid:18847, 子进程的pid:18848子进程正在运行,当前pid:0, 父进程pid:18847old priority = 0new priority = -1
在上述代码中,newpri = nice(6); 输出的newpri是6, 而newpri = nice(-6); 则输出的newpri是-1, 这说明在执行这条语句时nice有可能出错了
不能用errno检测-1, 因为 int prio 的取值时-20到20, 所以返回-1有可能是出错,也有可能是设置的优先级
又因为只要newpri = nice(负值); 输出的newpri都是-1,由此可判断是这条语句nice时出错
prio代表的是进程的执行优先权, 数值越低就代表有较高的优先次序, 执行会比较频繁,
此优先权默认是0, 而只有超级用户允许降低此值,这样就可以解释为什么newpri = nice(负值); 会一直出错了
root用户执行此段代码结果如下:
[dela@server1 dela_c]$ sudo ./a.out [sudo] password for dela: 父进程正在运行, 当前进程的pid:19592, 子进程的pid:19593子进程正在运行,当前pid:0, 父进程pid:19592old priority = 0new priority = -6
总结:
setpriority(int which, int who, int prio);
第三个参数prio的取值介于-20至20之间, 代表进程的执行优先权, 数值越低, 代表具有越高的优先权, 执行会更频繁, 此优先权默认是0, 而只有超级用户root才允许降低此值
0 0
- 通过系统调用nice改变进程优先级
- 进程优先级之nice系统调用
- 改变进程优先级(nice&renice)
- Linux改变进程优先级的Nice命令
- Linux改变进程优先级 linux Nice命令
- 进程优先级、nice值
- 进程优先级 nice
- nice设置进程优先级
- linux 提高进程优先级nice
- linux nice 设置进程优先级
- 进程优先级,进程nice值和%nice的解释
- 进程优先级,进程nice值和%nice的解释
- 进程优先级,进程nice值和%nice的解释
- 进程优先级,进程nice值和%nice的解释
- 进程优先级和进程nice值?
- 进程优先级和进程nice值?
- linux进程优先级、进程nice值
- linux进程调度,优先级、进程nice值
- 前端开发中的JS调试技巧
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK
- factory
- JAVA中复制数组的五种方法
- 沉淀自己厚积薄发
- 通过系统调用nice改变进程优先级
- 应用如何定制ActionBar的背景颜色
- 二叉树的遍历
- lintcode triangle 数字三角形
- AngularJS XMLHttpRequest
- java中反射
- 一些有用的网站收藏
- HDU 1248 寒冰王座
- JAVA笔记之RandomAccessFile