SCHED_SETSCHEDULER(2)

名称
sched_setscheduler, sched_getscheduler - スケジュール方針とスケジューラパラメータの設定 / 取得

ライブラリ
libc

書式
<sched.h> int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param) int sched_getscheduler(pid_t pid)

解説
sched_setscheduler() システムコールは、 pid で指定したプロセスのスケジュール方針とスケジュールパラメータを、それぞれ、 policy および param が指す sched_param 構造体の指定するパラメータに設定します。 param 構造体のメンバ sched_priority の値は、 policy で指定するスケジュール方針用の 優先度範囲内 (両端含む) の整数である必要があります。

この実装では、 pid の値が負である場合、システムコールは処理に失敗します。

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

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

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

スケジュール方針は <sched.h> 内にあります。

[SCHED_FIFO]
    ラウンドロビンスケジュールのない、 先入先出 (FIFO) 優先順位固定スケジュール。

[SCHED_OTHER]
    標準のタイムシェアリングスケジューラ。

[SCHED_RR]
    同じ優先順位のプロセス間でのラウンドロビンスケジュール。

sched_param 構造体は <sched.h> に定義されています。

    struct sched_param {
    	int sched_priority;	/* スケジュール優先順位 */
    };

sched_getscheduler() システムコールは、 pid で指定するプロセスのスケジュール方針を返します。

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

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

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

戻り値

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

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

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

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

[EINVAL]
    policy 引数の値が無効であるか、または param に含まれている 1 つまたは複数のパラメータが、 指定されたスケジュール方針で有効な範囲の外にあります。

関連項目
sched_getparam(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_rr_get_interval(2), sched_setparam(2), sched_yield(2)

規格
sched_setscheduler() システムコールと sched_getscheduler() システムコールは p1003.1b-93 に準拠しています。