nice函数
功能描述:
改变进程优先级。在调用进程的nice值上添加参数指定的值。较高的nice值意味值较低的优先级,只有超级用户才可指定负增量--即提升优先级。nice的取值范围可参考getpriority的描述。
用法:
#include<unistd.h>
int nice(intinc);
返回说明:
成功执行时,返回新的nice值。失败返回-1,errno被设为以下值
EPERM:调用者试着提高其优先级,但权能不足。
范例:
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main()
{
int ret = 0;
ret = nice(-2);
if (ret == -1)
perror("nice");
return ret;
}
getpriority() 與setpriority() 程式設計
SYNOPSIS
#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
getpriority() 的 which 參數用來指定要取得priority 對象:process、process group 或 user ID。
最容易學習的方式就是讀範例,所以我們將會設計 2 個範例來執行。
which 參數:
Jollen 寫了二個程式:setpriority.c 與getpriority.c。先來測試一下。
實測結果
隨便找一個對象下手:
# ps ax... 17349 ? S 0:02 [httpd] ...
把 PID 17349 的scheduling priority 往上提升一級:
#./getpriority 17349 Process (17349) Priority is 0.# ./setpriority Usage: ./setpriority [pid] [priority (-20~19)] #./setpriority 17349 -1 OK. # ./getpriority 17349 Process (17349)Priority is -1.
另外,系統指令 nice 可以用來設定執行命令的 process priority:
NICE(1)FSF NICE(1) NAME nice - run a program with modified schedulingpriority SYNOPSIS nice [OPTION] [COMMAND [ARG]...] DESCRIPTION RunCOMMAND with an adjusted scheduling priority. With no COMMAND,print the current scheduling priority. ADJUST is 10 b y default.Range goes from -20 (highest priority) to 19 (lowest). -n,--adjustment=ADJUST increment priority by ADJUST first --helpdisplay this help and exit --version output version information andexit
程式碼
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/time.h>#include <sys/resource.h>int main(int argc, char *argv[]){ int prio_process, prio_pgroup, prio_user; pid_t pid; if (argc != 2) return -1; pid = atoi(argv[1]); prio_process = getpriority(PRIO_PROCESS, pid); printf("Process (%d) Priority is %d.n", pid, prio_process); return 0;}
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/time.h>#include <sys/resource.h>int main(int argc, char *argv[]){ int errno, prio; pid_t pid; if (argc != 3) { printf("Usage: %s [pid] [priority (-20~20)]n", argv[0]); return -1; } pid = atoi(argv[1]); prio = atoi(argv[2]); errno = setpriority(PRIO_PROCESS, pid, prio); printf("OK.n"); return 0;}
setpriority | |
相关函数 | getpriority,nice |
表头文件 | #include<sys/time.h> #include<sys/resource.h> |
定义函数 | int setpriority(int which,int who, intprio); |
函数说明 | setpriority()可用来设置进程、进程组和用户的进程执行优先权。参数which有三种数值,参数who则依which值有不同定义 进程默认的优先权都为0,所以每个进程执行所占用的时间都差不多。为了使某个进程执行的时间更长一些,可以提高该进程的优先权。 |
返回值 | 执行成功则返回0,如果有错误发生返回值则为-1,错误原因存于errno。 ESRCH 参数which或who 可能有错,而找不到符合的进程 EINVAL 参数which值错误。 EPERM 权限不够,无法完成设置 EACCES 一般用户无法降低优先权 |