/etc/project データベースで次のエントリを入力し、x-files プロジェクトの各タスクの最大 LWP 数を 3 に設定します。
x-files:100::root::task.max-lwps=(privileged,3,deny) |
プロジェクト x-files で newtask と結合することによって新しいタスクを作成したスーパーユーザーは、そのタスクの実行中、LWP を 3 つまでしか作成できません。次の注釈付きのセッション例を参照してください。
# newtask -p x-files csh
# prctl -n task.max-lwps $$
688: csh
task.max-lwps
3 privileged deny
2147483647 system deny
# id -p
uid=0(root) gid=1(other) projid=100(x-files)
# ps -o project,taskid -p $$
PROJECT TASKID
x-files 236
# csh /* 2 つ目の LWP を作成 */
# csh /* 3 つ目の LWP を作成 */
# csh /* これ以上 LWP を作成することはできない */
Vfork failed
#
|
/etc/project ファイルには、各プロジェクトごとに複数の資源制御設定を記述でき、さらに各資源制御ごとに複数のしきい値を記述できます。しきい値は action 文節で定義されます。複数の値はコンマで区切られます。
ファイル内の次の行は、basic (基本) レベルの制御を設定します。この設定では、x-files プロジェクトのタスクごとの最大 LWP 数に対して、アクションは発生しません。また、タスクごとの最大 LWP 数に対して特権レベルの deny 制御を設定しています。この制御により、前述の例のように、最大数を超える数の LWP を作成しようとすると失敗します。最後に、プロセスごとの最大ファイル記述子は basic レベルに制限されており、最大値を超えるオープンコールは失敗します。
x-files:101::root::task.max-lwps=(basic,10,none),(privileged,500,deny);
process.max-file-descriptor=(basic,128,deny)
|
スーパーユーザーは、prctl と入力することにより、実行中の現在のシェルの最大ファイル記述子を表示できます。
# prctl -n process.max-file-descriptor $$
8437: sh
process.max-file-descriptor [ lowerable deny ]
256 basic deny
65536 privileged deny
2147483647 system deny
|
prctl コマンドを使って新しい特権値を一時的に追加し、x-files プロジェクトの各タスクで 4 つ以上の LWP の使用を拒否することもできます。結果は プロジェクト内の各タスクの最大 LWP 数を設定する方法の結果と同じです。次の注釈付きサンプルセッションでこれを示します。
# newtask -p x-files
# id -p
uid=0(root) gid=1(other) projid=101(x-files)
# prctl -n task.max-lwps -t privileged -v 3 -e deny -i project x-files
# prctl -n task.max-lwps -i project x-files
670: sh
task.max-lwps
3 privileged deny
2147483647 system deny
|
prctl -r を使って資源制御の最小値を変更することもできます。
# prctl -n process.max-file-descriptor -r -v 128 $$ |
rctladm を使用すると、資源制御のグローバル syslog 属性を有効にできます。制御が限界を超えたとき、指定された syslog レベルで通知が記録されます。次のコマンドを入力します。
# rctladm -e syslog process.max-file-descriptor |