GETPRIORITY(2)

名称
getpriority, setpriority - プログラムスケジュール優先順位を取得 / 設定する

ライブラリ
libc

書式
<sys/time.h> <sys/resource.h> int getpriority(int which, int who) int setpriority(int which, int who, int prio)

解説
which および who で指示されるプロセス、プロセスグループ、 またはユーザのスケジュール優先順位は getpriority() システムコールで取得され、 setpriority() システムコールで設定されます。 which 引数は、 PRIO_PROCESS, PRIO_PGRP または PRIO_USER のどれかであり、 who は which に関連して解釈されます (PRIO_PROCESS の場合はプロセス識別子、 PRIO_PGRP の場合はプロセスグループ識別子、および PRIO_USER の場合はユーザ ID)。 who の値が 0 であるのは、 現在のプロセス、プロセスグループ、またはユーザを表します。 prio 引数は -20 から 20 の範囲の値です。 デフォルトの優先順位は 0 です。 優先順位が低いと、スケジュール調整にはより都合がよくなります。

getpriority() システムコールは、指定のプロセスのいずれかが享受する最高の優先順位を 返してきます (最も小さい数値です)。 setpriority() システムコールは、指定されたすべてのプロセスの優先順位を指定の値に設定します。 スーパユーザだけが優先順位を低くできます。

戻り値
getpriority() は処理を正しく完了しても値 -1 を返すことがあるので、 呼び出しの前に外部変数 errno をクリアしてから、後にこれをチェックして -1 がエラーであるか、 または正当な値であるか判定する必要があります。

エラー
getpriority() と setpriority() システムコールは次の場合に失敗します:

[ESRCH]
    指定された which と who の値を使用しているプロセスが見つかりませんでした。

[EINVAL]
    which 引数が PRIO_PROCESS, PRIO_PGRP または PRIO_USER のどれでもありませんでした。

上記のエラーだけでなく、 setpriority() は次の場合に失敗します:

[EPERM]
    プロセスは検出されたものの、その実効 ID も実ユーザ ID の どちらも、呼び出し側の実効ユーザ ID に一致しませんでした。

[EACCES]
    スーパユーザでないものがプロセスの優先順位を下げようとしました。

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

歴史
getpriority() システムコールは 4.2BSD ではじめて登場しました。