int getpriority(int which, id_t who);
int setpriority(int which, id_t who, int prio);
which の値は PRIO_PROCESS, PRIO_PGRP, PRIO_USER, のどれか一つで、 who は which に応じて解釈される (PRIO_PROCESS だとプロセス識別子、 PRIO_PGRP だとプロセスグループ識別子、 PRIO_USER だと UID (ユーザーID) と解釈される)。 who がゼロならば、(それぞれ)呼び出したプロセス、 呼び出したプロセスのプロセスグループ、 呼び出したプロセスの実UID を意味する。
prio 引数は -20 から 19 の範囲の値で (但し以下の「注意」を参照)、 -20 が最高優先度で、 19 が最低優先度である。優先度をこの範囲外に設定しようとした場合は、値は黙ってこの範囲となる。デフォルトの優先度は 0 である; 小さな数字ほど、プロセスのスケジューリング優先度が高くなる。
getpriority() コールは指定したプロセスの中の最も高い優先度 (数値的には最小の値) を返す。 setpriority() コールは指定したプロセス全ての優先度を指定した値に設定する。
Traditionally, only a privileged process could lower the nice value (i.e., set a higher priority). However, since Linux 2.6.12, an unprivileged process can decrease the nice value of a target process that has a suitable RLIMIT_NICE soft limit; see getrlimit(2) for details.
getpriority() は成功した場合にも -1 の値を返す可能性があるので、 呼び出しの前に外部変数の errno をクリアし、呼び出しの後に返り値の -1 が正当な値か エラーかを判別する必要がある。
成功すると、 setpriority() は 0 を返す。 エラーの場合、-1 を返し、 errno にエラーの原因を示す値を設定する。
上記のものに加えて setpriority() では以下のエラーがある:
Note: the addition of the "autogroup" feature in Linux 2.6.38 means that the nice value no longer has its traditional effect in many circumstances. For details, see sched(7).
fork(2) で作成された子プロセスは、 親プロセスの nice 値を継承する。 execve(2) の前後で nice 値は保存される。
EPERM が発生する条件の詳細はシステムに依存する。 上記の説明は POSIX.1-2001 のものであり、全ての System V 風システムは これに従っているようである。 2.6.12 より前の Linux カーネルでは、呼び出し元の実 UID または 実効 UID がプロセス who の (実効 UID でなく) 実 UID に一致する必要がある。 Linux 2.6.12 以降では、呼び出し元の実行 UID がプロセス who の実 UID か実効 UID のいずれかと一致する必要がある。 全ての BSD 風システム (SunOS 4.1.3, Ultrix 4.2, 4.3BSD, FreeBSD 4.3, OpenBSD-2.5等) は、 Linux 2.6.12 以降と同じ動作をする。
現在では <sys/time.h> をインクルードする必要はないが、インクルードすれば移植性を高めることができる (実際には <sys/resource.h> で rusage 構造体が定義されているが、そのフィールドで使用されている struct timeval 型は <sys/time.h> で定義されている)。
Linux カーネルのソースツリー内の Documentation/scheduler/sched-nice-design.txt (Linux 2.6.23 以降)
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]