Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

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

書式

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

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

説明

       The scheduling priority of the process, process group, or user, as indicated by which and who is obtained
       with the getpriority()  call and set with the setpriority()  call.  The process attribute dealt  with  by
       these system calls is the same attribute (also known as the "nice" value) that is dealt with by nice(2).

       which  の値は  PRIO_PROCESS,  PRIO_PGRP,  PRIO_USER,  のどれか一つで、  whowhich に応じて解釈される
       (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.

返り値

       On  success,  getpriority()  returns the calling thread's nice value, which may be a negative number.  On
       error, it returns -1 and sets errno to indicate the cause of the error.

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

       成功すると、  setpriority()  は 0 を返す。 エラーの場合、-1 を返し、 errno にエラーの原因を示す値を設定す
       る。

エラー

       EINVAL whichPRIO_PROCESS, PRIO_PGRP, PRIO_USER のいずれでもない。

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

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

       EACCES The caller attempted to set a lower nice value (i.e., a higher process priority), but did not have
              the required privilege (on Linux: did not have the CAP_SYS_NICE capability).

       EPERM  プロセスは見つかったが、そのプロセスの実効  (effective)  UID  が 呼び出し元の実効UID にも実 (real)
              UID にも一致せず、 呼び出し元が特権も持っていなかった (Linux の場合、 CAP_SYS_NICE  ケーパビリティ
              がなかった)。 以下の「注意」も参照のこと。

準拠

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD (これらのインターフェースは 4.2BSD で初めて登場した)

注意

       nice 値の詳細は sched(7) を参照のこと。

       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> で定義されている)。

   C ライブラリとカーネルの違い
       カーネル内部では、nice  値は実際には  40 〜 1 の範囲を使って 表現されており (負の値はエラーコードとなるた
       め)、こちらの値が システムコール setpriority()  と getpriority()  で使用されている。 glibc のこれらのシス
       テムコールのラッパー関数において、nice 値の ユーザー領域 (user-land) とカーネル表現の間の変換が行われる。
       変換式は unice = 20 - knice となる。 (したがって、カーネルの 40..1  の範囲はユーザー空間で見える  -20..19
       の範囲に対応する。)

バグ

       POSIX では nice 値はプロセス単位の設定となっている。 一方、 現在の POSIX スレッドの Linux/NPTL 実装では、
       nice 値はスレッド単位の属性である。 同じプロセスの別々のスレッドが異なる nice 値を持つ場合がある。 移植性
       が必要なアプリケーションではこの  Linux の動作を前提するのは避けるべきである。 Linux の動作は将来標準に準
       拠した動作になるかもしれない。

関連項目

       nice(1), renice(1), fork(2), capabilities(7), sched(7)

       Linux カーネルのソースツリー内の Documentation/scheduler/sched-nice-design.txt (Linux 2.6.23 以降)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10  の一部である。プロジェクトの説明とバグ報告
       に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。