次の図に、デフォルトのプロセス優先順位を示します。
プロセス優先順位が意味を持つのは、スケジューリングクラスについてだけです。プロセス優先順位を指定するには、クラスとクラス固有の優先順位の値を指定します。クラスとクラス固有の値は、システムによってグローバル優先順位に割り当てられ、この値を使用してプロセスがスケジューリングされます。
優先順位は、システム管理者から見た場合とユーザーまたはプログラマから見た場合とで異なります。スケジューリングクラスを設定する場合、システム管理者はグローバル優先順位を直接取り扱います。システムでは、ユーザーが指定した優先順位は、このグローバル優先順位に割り当てられます。優先順位の詳細は、『Solaris のシステム管理 (基本編)』を参照してください。
ps(1) コマンドで -cel オプションを指定すると、動作中のすべてのプロセスのグローバル優先順位が表示されます。priocntl(1) コマンドを指定した場合、ユーザーとプログラマが使用するクラス固有の優先順位が表示されます。
priocntl(1) コマンド、priocntl(2) インタフェース、および priocntlset(2) インタフェースは、プロセスのスケジューリングパラメータを設定または取得するために使用されます。優先順位を設定するときには、これらのコマンドおよびインタフェースいずれの場合でも、次の同じ手順に従います。
ターゲットプロセスを指定する。
そのプロセスに希望するスケジューリングパラメータを指定する。
プロセスにパラメータを設定するコマンドまたはインタフェースを実行する。
プロセス ID は UNIX プロセスの基本設定項目です。詳細は、Intro(2) を参照してください。クラス ID はプロセスのスケジューリングクラスです。priocntl(2) は、タイムシェアリングクラスと実時間クラスだけに有効で、システムクラスには使用できません。
priocntl(1) ユーティリティーは、プロセスをスケジューリングする際に、次の 4 つの制御インタフェースを実行します。
構成情報を表示します
プロセスのスケジューリングパラメータを表示します
プロセスのスケジューリングパラメータを設定します
指定したスケジューリングパラメータでコマンドを実行します
次に、priocntl(1) を使用したいくつかの例を示します。
-l オプションを使用すると、次のようにデフォルトの設定が出力されます。
$ priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range -60 through 60 RT (Real Time) Maximum Configured RT Priority: 59 |
すべてのプロセスの情報を表示するには、次のように指定します。
$ priocntl -d -i all |
すべてのタイムシェアリングプロセスの情報を表示するには、次のように指定します。
$ priocntl -d -i class TS |
ユーザー ID が 103 または 6626 のすべてのプロセスの情報を表示するには、次のように指定します。
$ priocntl -d -i uid 103 6626 |
ID 24668 のプロセスをデフォルトのパラメータでリアルタイムプロセスに設定するには、次のように指定します。
$ priocntl -s -c RT -i pid 24668 |
ID 3608 のプロセスを、優先順位 55、タイムスライス 5 分の 1 秒のリアルタイムプロセスに設定するには、次のように指定します。
$ priocntl -s -c RT -p 55 -t 1 -r 5 -i pid 3608 |
すべてのプロセスをタイムシェアリングプロセスに変更するには、次のように指定します。
$ priocntl -s -c TS -i all |
ユーザー ID が 1122 のプロセスのタイムシェアリングユーザー指定の優先順位とユーザー指定の優先順位制限を -10 に減らすには、次のように指定します。
$ priocntl -s -c TS -p -10 -m -10 -i uid 1122 |
リアルタイムシェルをデフォルトのリアルタイム優先順位で起動するには、次のように指定します。
$ priocntl -e -c RT /bin/sh |
make をタイムシェアリングユーザー優先順位 -10 で実行するには、次のように指定します。
$ priocntl -e -c TS -p -10 make bigprog |
priocntl(1) には、nice(1) のインタフェースが含まれます。nice(1) は、タイムシェアリングプロセスについてだけ有効で、数値が大きいほど優先順位が低くなります。前述の例は、nice(1) を使用してインクリメントを 10 に設定するのと同じです。
$ nice -10 make bigprog |
priocntl(2) は、1 つのプロセスまたは 1 組のプロセスのスケジューリングパラメータを管理します。priocntl(2) 呼び出しにより管理できるのは、LWP、単独のプロセス、またはプロセスのグループです。プロセスのグループは、親プロセス、プロセスグループ、セッション、ユーザー、グループ、クラス、または動作中のすべてのプロセスによって識別できます。詳細は、priocntl のマニュアルページを参照してください。
クラス ID を指定した場合、PC_GETCLINFO コマンドはスケジューリングクラス名とパラメータを取得します。このコマンドを使用すると、設定するクラスを想定しないプログラムを作成できます。
PC_SETXPARMS コマンドは、一組のプロセスのスケジューリングクラスとパラメータを設定します。idtype と id の入力引数は、変更するプロセスを指定します。