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

名前

       sched_setscheduler, sched_getscheduler - スケジューリングポリシーとパラメーターを設定/取得
       する

書式

       #include <sched.h>

        int sched_setscheduler(pid_t pid, int policy,
                              const struct sched_param *param);

       int sched_getscheduler(pid_t pid);

説明

       sched_setscheduler() システムコールは、 pid で指定された ID を持つスレッドのスケジューリン
       グポリシーとスケジューリングパラメーターの両方を設定する。  pid  が 0 の場合、呼び出したス
       レッド自身のスケジューリングポリシーとスケジューリングパラメーターが設定される。

       スケジューリングパラメーターは param 引数で、以下の形式の構造体へのポインターを指定する。

           struct sched_param {
               ...
               int sched_priority;
               ...
           };

       現在の実装では、この構造体のフィールドは sched_priority だけである。 param  がどのように解
       釈されるかは選択されたポリシーによって変わる。

       現在のところ、 Linux では、 以下の「通常」の (つまり、リアルタイムではない) スケジューリン
       グポリシーが、 policy に指定できる値としてサポートされている。

       SCHED_OTHER   標準の、ラウンドロビンによる時分割型のスケジューリングポリシー。

       SCHED_BATCH   「バッチ」形式でのプロセスの実行用。

       SCHED_IDLE    「非常に」低い優先度で動作するバックグラウンドジョブ用。

       上記のどのポリシーの場合でも、 param->sched_priority は 0 でなければならない。

       どの実行可能スレッドを選択するかについて、より正確な制御を必要とする  時間の制約が厳しい特
       別なアプリケーション用として、 いろいろな「リアルタイム」ポリシーもサポートされている。 プ
       ロセスがこれらのポリシーをいつ使用できるかを決めるルールについては、sched(7)      を参照。
       policy には以下のリアルタイムポリシーを指定できる。

       SCHED_FIFO    ファーストイン、ファーストアウト型のポリシー。

       SCHED_RR      ラウンドロビン型のポリシー。

       上記のどのポリシーの場合でも、  param->sched_priority はそのスレッドのスケジューリングポリ
       シーを指定する。     指定された      policysched_get_priority_min(2)      と
       sched_get_priority_max(2)  を呼び出した返り値の範囲の数字を指定する。 Linux では、これらの
       システムコールはそれぞれ 1 と 99 を返す。

       Linux 2.6.32 以降では、 sched_setscheduler() を呼び出す際に policySCHED_RESET_ON_FORK
       フラグを  OR で指定できる。このフラグが指定されると、 fork(2) で作成された子プロセスは特権
       が必要なスケジューリングポリシーを継承しない。 詳細は sched(7) を参照。

       sched_getscheduler()   は   pid   で識別されるスレッドの現在のスケジューリングポリシーを返
       す。pid が 0 ならば、呼び出した スレッド自身のスケジューリングポリシーが返される。

返り値

       成功した場合、  sched_setscheduler()  は 0 を返す。 成功した場合、 sched_getscheduler() は
       現在のそのスレッドのポリシー (非負の整数) を返す。 エラーの場合、 どちらのコールも -1 を返
       し、 errno が適切に設定される。

エラー

       EINVAL 無効な引数: pid が負である、または param が NULL である。

       EINVAL (sched_setscheduler()) policy が認識できるポリシーではない。

       EINVAL (sched_setscheduler()) 引数 param が指定された policy では意味を持たない。

       EPERM  呼び出したスレッドが適切な特権を持っていない。

       ESRCH  ID が pid のスレッドが見つからなかった。

準拠

       POSIX.1-2001,  POSIX.1-2008  (但し、下記のバグの節も参照)。 SCHED_BATCHSCHED_IDLE ポリ
       シーは Linux 固有である。

注意

       Further details of the semantics of all of the above "normal" and  "real-time"  scheduling
       policies  can  be  found  in  the  sched(7)   manual  page.   That  page also describes an
       additional policy, SCHED_DEADLINE, which is settable only via sched_setattr(2).

       POSIX システムでは  <unistd.h>_POSIX_PRIORITY_SCHEDULING  が定義されている場合にのみ
       sched_setscheduler()  と sched_getscheduler()  が使用できる。

       POSIX.1  は、非特権スレッドが sched_setscheduler()  を呼び出すために必要な権限の詳細を規定
       しておらず、 詳細はシステムにより異なる。 例えば、Solaris 7 のマニュアルページでは、  呼び
       出し元の実ユーザー  ID  または実効ユーザー  ID  が  設定対象の実ユーザー  ID か保存 (save)
       set-user-ID と 一致していなければならない、となっている。

       Linux では、 スケジューリングポリシーとスケジューリングパラメーターは、 実際にはスレッド単
       位の属性である。 gettid(2) の呼び出しの返り値をこのシステムコールの pid 引数として渡すこと
       ができる。 pid に 0 を指定すると、 呼び出し元のスレッドの属性が設定される。 getpid(2) コー
       ルからの返り値を   pid  に指定すると、  スレッドグループのメインスレッドの属性が設定される
       (POSIX   スレッド   API   を使用している場合は、    sched_*(2)    システムコールの代わりに
       pthread_setschedparam(3), pthread_getschedparam(3), and pthread_setschedprio(3) を使用する
       こと)。

バグ

       POSIX.1 では、成功時に sched_setscheduler()   は直前のスケジューリングポリシーを返すべきと
       されている。  Linux の sched_setscheduler()  はこの要求仕様に準拠しておらず、 成功時には常
       に 0 を返す。

関連項目

       chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2),
       sched_getaffinity(2), sched_getattr(2), sched_getparam(2), sched_rr_get_interval(2),
       sched_setaffinity(2), sched_setattr(2), sched_setparam(2), sched_yield(2), setpriority(2),
       capabilities(7), cpuset(7), sched(7)

この文書について

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