GETPRIORITY(2) — NEWS-OS Programmer’s Manual
名称
getpriority, setpriority − プログラムのスケジューリングのプライオリティを取り出す/セットする
形式
#include <sys/time.h>
#include <sys/resource.h>
#define PRIO_PROCESS0/∗ process ∗/
#define PRIO_PGRP1/∗ process group ∗/
#define PRIO_USER2/∗ user id ∗/
prio = getpriority(which, who)
int prio, which, who;
setpriority(which, who, prio)
int which, who, prio;
解説
which と who で指定されるプロセス、 プロセスグループ、 またはユーザのスケジューリングのプライオリティは、 getpriority コールで得られ、 setpriority コールでセットされます。 which は、 PRIO_PROCESS、 PRIO_PGRP、 PRIO_USERのうちの 1つであり、 who は、 which に対応して(PRIO_PROCESS の場合はプロセスID、 PRIO_PGRP の場合はプロセスグループID、 PRIO_USER の場合はユーザIDとして)解釈されます。 値が 0 である who は、 現プロセス、または 現プロセスグループ、 現ユーザを 表します。 prio は、 −20 から 20 までの範囲の値です。 デフォルトのプライオリティは 0 です。 この数値が小さいほど、 それだけスケジューリングでは有利となります。
getpriority コールは、 指定されたプロセスのいずれかによって使用されている最高の プライオリティ(最小の数値)を 返します。 setpriority コールは、 指定されたすべてのプロセスのプライオリティを 指定された値にセットします。 スーパーユーザだけが値を 小さくすることができます。
リターン値
getpriority はエラーではなくても −1 を 返すことがあるため、 コールを 実行する前に外部変数 errno を クリアする必要があります。 そうすることによって、 −1 がエラーまたは優先順位の値のいずれであるかを あとで判定することができます。 setpriority はエラーがなければ 0 を 返し、 エラーがあれば−1を 返します。
エラー
getpriority と setpriority は、 次のエラーのうちの1つを 返すことがあります。
[ESRCH] 指定された which と who の値を 使用してプロセスがつきとめられなかった。
[EINVAL] which が、 PRIO_PROCESS、 PRIO_PGRP、 PRIO_USERのうちの1つではなかった。
上記のエラーのほかに、 setpriority が失敗した場合には、 次のエラーのうちの1つが返されます。
[EPERM] プロセスは存在したが、 その有効および実ユーザIDのどちらも呼出しユーザの有効ユーザIDに一致しなかった。
[EACCES] スーパーユーザ以外がプロセスの優先順位を 上げようとした。
関連事項
NEWS-OSRelease 4.1C