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/ に書かれている。