/etc/project データベースで次のエントリを入力し、x-files プロジェクトの各タスクの最大 LWP 数を 3 に設定します。
x-files:100::root::task.max-lwps=(privileged,3,deny) |
スーパーユーザーが newtask を使って x-files プロジェクトに参加することにより、このプロジェクトに新しいタスクを作成した場合、スーパーユーザーは、次の注釈付きのサンプルセッションからもわかるように、実行中はこのタスク内に 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 |