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.2.1R