GETPRIORITY(2)

名前
getpriority, setpriority - プログラムのスケジューリングの優先度を取得/設定する

書式
#include <sys/time.h>
#include <sys/resource.h>

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

説明
which と who で指定されたプロセス、プロセス・グループ、ユーザーの スケジューリング(scheduling)の優先度(priority)を getpriority コールは取得し、 setpriority コールは設定する。 which は PRIO_PROCESS, PRIO_PGRP, PRIO_USER, のどれか一つで、 who は which に関連して選択する。 ( PRIO_PROCESS ではプロセスを指定する、 PRIO_PGRP ではプロセス・グループを指定する、 PRIO_USER ではユーザー ID を指定する)。 who がゼロならば、呼び出したプロセス、プロセス・グループ、ユーザーを 意味する。 prio は -20 から 20 の範囲の値で、デフォルトの優先度は 0 である; 小さな数字ほど、有利なスケジューリングとなる。 getpriority コールは指定したプロセスのなかの最も高い優先度(数値的には最小)を返す。 setpriority コールは指定したプロセス全ての優先度を指定した値に設定する。 スーパー・ユーザーのみが今より低い値に設定できる。

返り値
getpriority は成功した場合にも -1 の値を返す可能性があるので、 呼び出しの前に外部変数の errno をクリアし、呼び出しの後に返り値の -1 が正当な値か エラーかを判別する必要がある。 エラーがなれば setpriority コールは 0 を返す。エラーがあれば -1 を返す。

エラー

ESRCH
    which と who で指定されたプロセスが存在しない。

EINVAL
    which が PRIO_PROCESS, PRIO_PGRP, PRIO_USER のどれかでない。

上記のものに加えて setpriority では以下のエラーがある:

EPERM
    プロセスは見つかったが、その実効(effective)ユーザーIDまたは 実(real)ユーザーID が呼び出し者の実効ユーザーID と一致しない。

EACCES
    スーパー・ユーザー以外がプロセスにより低い優先を与えようとした。

準拠
SVr4, 4.4BSD (これらの関数コールは BSD 4.2 で始めに現われた).

関連項目
nice(1), fork(2), renice(8)