SCHED_SETPARAM(2)

名称
sched_setparam, sched_getparam - スケジュールパラメータの設定 / 取得

ライブラリ
libc

書式
<sched.h> int sched_setparam(pid_t pid, const struct sched_param *param) int sched_getparam(pid_t pid, struct sched_param *param)

解説
sched_setparam() 関数は、 pid で指定するプロセスのスケジュールパラメータを、 param が指す構造体 sched_param の指定する値に設定します。 構造体 param のメンバ sched_priority の値は、 pid で指定するプロセスの現在のスケジュール方針用の 優先順位範囲内 (両端含む) の整数である必要があります。 優先順位の数値が高いほど優先順位が高いことを表します。

この実装では、 pid の値が負の場合、関数は処理に失敗します。

pid で指定するプロセスが存在し、かつ 呼び出し元プロセスにパーミッションがある場合、 プロセス ID が pid と等しいプロセスに対してスケジュールパラメータを設定します。

pid が 0 の場合、呼び出し元プロセスに対して スケジュールパラメータを設定します。

この実装では、あるプロセスが別のプロセスのスケジュールパラメータに いつ影響を及ぼせるのかという方針は、書込みスタイル操作として p1003_1b に指定されているものです。

ターゲットプロセスは、実行中にせよ実行中でないにせよ、 優先順位が等しいかまたはより高い、 他のすべての実行可能なプロセスが実行されるようにスケジュールされた後で、 実行を再開します。

pid 引数で指定するプロセスの優先順位が、 最も優先順位の低い実行中のプロセスの優先順位より高く設定されており、 しかも指定のプロセスの実行準備ができている場合、 pid 引数で指定するプロセスは 優先順位が最も低い実行中のプロセスをプリエンプトします。 同じように、 sched_setparam() を呼び出しているプロセスがその優先順位を、 1 つまたは複数の空でないプロセスリストの優先順位より低く設定する場合、 優先順位が最も高いリストの先頭のプロセスも 呼び出し元プロセスをプリエンプトします。 このように、いずれのケースでも、 優先順位の高いプロセスが実行されてしまうまで、 元のプロセスが要求した優先順位変更の完了通知を受信しない可能性があります。

この実装では、 pid で指定するプロセスの現在のスケジュール方針が通常のタイムシェアリング (SCHED_OTHER; POSIX ソースでない場合は SCHED_NORMAL) であるかアイドル方針 (POSIX ソースでない場合は SCHED_IDLE) であるなら、 その動作は、実在するリアルタイム優先順位よりも低い優先順位の SCHED_RR でプロセスが実行されていたかのようになります。

sched_getparam() 関数は、 pid で指定するプロセスのスケジュールパラメータを param が指す sched_param 構造体に入れて返します。

pid で指定するプロセスが存在してかつ、 呼び出し元プロセスにパーミッションがある場合、 プロセス ID が pid に等しいプロセスのスケジュールパラメータを返します。

この実装では、あるプロセスが別のプロセスのスケジュールパラメータを いつ得られるかの方針は、読取りスタイル操作として p1003_1b に詳説されているものです。

pid が 0 の場合、呼び出し元プロセスのスケジュールパラメータを返します。 この実装では、 pid が負の場合、 sched_getparam 関数は処理に失敗します。

戻り値

エラー
処理に失敗すると、 errno を対応する値に設定します。

[ENOSYS]
    システムはこの機能をサポートするように構成されていません。

[EPERM]
    要求しているプロセスは、 p1003_1b で詳説されているパーミッションを持っていません。

[ESRCH]
    pid で指定したプロセスに対応するプロセスが見つかりません。

[EINVAL]
    sched_setparam() で、要求された 1 つ以上のスケジュールパラメータが、指定の pid のスケジュール方針で定義された範囲の外側にあります。

関連項目
sched_getscheduler(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_rr_get_interval(2), sched_setscheduler(2), sched_yield(2)

規格
sched_setparam() 関数と sched_getparam() 関数は p1003.1b-93 に準拠しています。