GETPRIORITY - Linux手册页

时间:2019-08-20 17:59:21  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

getpriority,setpriority-获取/设置程序调度优先级

语法

#包括
#包括

int getpriority(int which,id_t who);
int setpriority(int which,id_t who,int prio);

说明

流程,流程组或用户的调度优先级,如通过getpriority()调用获取哪个对象以及通过setpriority()调用设置的对象和对象所示。这些系统调用处理的process属性与nice(2)处理的属性相同(也称为" nice"值)。

该值是PRIO_PROCESS,PRIO_PGRP或PRIO_USER中的一个,并且相对于谁进行解释(PRIO_PROCESS的进程标识符,PRIO_PGRP的进程组标识符和PRIO_USER的用户ID)。谁(分别)表示呼叫过程,呼叫过程的过程组或呼叫过程的真实用户ID的零值。

prio参数是一个介于-20到19之间的值(但请参阅下面的注释)。 -20是最高优先级,19是最低优先级。尝试在此范围之外设置优先级会被默默地限制在该范围内。默认优先级为0;默认值为0。较低的值赋予进程较高的调度优先级。

getpriority()调用返回任何指定进程享有的最高优先级(最低数值)。 setpriority()调用将所有指定进程的优先级设置为指定值。

传统上,只有特权进程才能降低nice值(即,设置更高的优先级)。但是,从Linux 2.6.12开始,无特权的进程可能会降低具有合适的RLIMIT_NICE软限制的目标进程的值。有关详细信息,请参见getrlimit(2)。

返回值

成功时,getpriority()返回调用线程的好值,该值可以为负数。错误时,它返回-1并设置errno以指示错误原因。由于成功调用getpriority()可以合法地返回值-1,因此有必要在调用之前清除外部变量errno,然后在之后检查它以确定-1是错误还是合法值。

setpriority()成功返回0。错误时,它返回-1并设置errno以指示错误原因。

错误说明

EINVAL
不是PRIO_PROCESS,PRIO_PGRP或PRIO_USER之一。
ESRCH
使用指定的which和who值找不到任何进程。

除上述错误外,如果发生以下情况,setpriority()可能会失败:

EACCES
调用方尝试设置一个较低的尼斯值(即,较高的进程优先级),但没有所需的特权(在Linux上:不具有CAP_SYS_NICE功能)。
EPERM
找到了一个进程,但是其有效用户ID与调用方的有效或真实用户ID不匹配,并且没有特权(在Linux上:不具有CAP_SYS_NICE功能)。但是请参阅下面的注释。

遵循规范

POSIX.1-2001,POSIX.1-2008,SVr4、4.4BSD(这些接口最早出现在4.2BSD中)。

备注

有关nice值的更多详细信息,请参见sched(7)。

注意:Linux 2.6.38中增加了"自动分组"功能,这意味着在许多情况下,nice值不再具有其传统效果。有关详细信息,请参见sched(7)。

fork(2)创建的子级继承其父级的nice值。好的值在execve(2)中保留。

EPERM条件的详细信息取决于系统。上面的描述是POSIX.1-2001所说的,并且似乎在所有类似System V的系统上都遵循。 2.6.12之前的Linux内核要求调用者的真实或有效用户ID匹配进程的真实用户(而不是其有效用户ID)。 Linux 2.6.12和更高版本要求调用者的有效用户ID匹配进程who的真实或有效用户ID。所有类似BSD的系统(SunOS 4.1.3,Ultrix 4.2、4.3BSD,FreeBSD 4.3,OpenBSD-2.5等)的行为均与Linux 2.6.12及更高版本相同。

这些天都不需要添加,但是增加了可移植性。 (实际上,使用在中定义的struct timeval类型的字段定义了rusage结构。)

C library/kernel differences

在内核中,好的值实际上是使用范围40..1表示的(因为负数是错误代码),这些是setpriority()和getpriority()系统调用使用的值。这些系统调用的glibc包装器函数根据unice = 20-knice的公式处理nice值的用户域和内核表示之间的转换。 (因此,从用户空间看,内核的40..1范围对应于-20..19范围。)

BUGS

根据POSIX,nice值是每个进程的设置。但是,在POSIX线程的当前Linux / NPTL实现下,nice值是每个线程的属性:同一进程中的不同线程可以具有不同的nice值。可移植的应用程序应避免依赖Linux行为,将来可能会使其符合标准。

另外参见

nice(1),renice(1),fork(2),capabilities(7),sched(7)

Linux内核源代码树中的Documentation / scheduler / sched-nice-design.txt(自Linux 2.6.23开始)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/