ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- 実行中のプロセス、タスク、およびプロジェクトのリソース制御の取得または設定
prctl [-P] [-t [basic | privileged | system]] [-n name [-srx] [-v value] [-e | -d action] [-p pid]] [-i idtype] id...
prctl ユーティリティーを使用すると、システム上のアクティブなプロセス、タスク、またはプロジェクトに関連付けられているリソース制御に対して、確認や変更を行うことができます。これを使えば、指定されたエンティティー上の基本制限、特権付き制限、および現在の使用状況にアクセスできます。
Solaris オペレーティングシステムの現行リリースでサポートされているリソース制御については、resource_controls(5) を参照してください。
-s、-r、-x、-v、-d、-e のいずれのオプションも指定されなかった場合、その呼び出しは取得処理とみなされます。それ以外の場合、それは変更処理とみなされます。
次のオプションがサポートされています。
-v、-t、および -p で指定されたリソース制御値に対し、指定された action を無効 (-d) または有効 (-e) にします。-v、-t、-p のいずれかのオプションが指定されなかった場合、すべての値、特権、または受取人 pid に一致します。たとえば、-v のみが指定された場合、それに一致する値を持つ最初のリソース制御が変更されます。その際、すべての特権と受取人 pid に一致します。一致するリソース制御値が見つからなかった場合には、あたかも -s が指定されたかのように、新しい値が追加されます。
アクション:
このアクションは -d でのみ使用できます。これは、すべてのアクションを無効化します。これは、deny 大域フラグを持つリソース制御値では失敗します。
プロセス、タスク、プロジェクト、またはゾーンからのリソース要求がリソース制御値を超えた場合に、リソース制御がその要求を拒否しようとすることを示します。no-deny 大域フラグを持つリソース制御では、deny アクションは有効にできません。deny 大域フラグを持つリソース制御では、deny アクションは無効にできません。
このアクションは -d でのみ使用できます。これは、signal アクションを無効にします。
signal=signum アクションの signum は、シグナル番号 (またはシグナルの文字列表現) です。no-local-action 大域フラグを持つリソース制御上に signal アクションを設定すると、失敗します。送信可能なシグナルは限られています。詳細については、「注意事項」を参照してください。
ID オペランドのタイプを指定します。有効な idtype は、process、task、project、または zone です。また、pid、taskid、projid、および zoneid も使用できます。-i オプションが省略された場合のデフォルトの ID タイプは、process です。
変更処理の場合、ID オペランドが所属するエンティティーが、ターゲットエンティティーになります。たとえば、-i process を指定して特定のプロジェクトリソース制御を設定した場合、指定された各プロセス引数が所属するプロジェクト上にそのリソース制御が設定されます。
取得処理の場合、ID オペランドが所属するすべてのエンティティーのリソース制御が、一覧表示されます。たとえば、-i task taskid と指定した場合、そのタスクのタスクリソース制御、プロジェクトリソース制御、およびゾーンリソース制御に加え、そのタスクが所属するプロジェクトとゾーンのリソース制御も一覧表示されます。
取得または設定するリソース制御の名前を指定します。name が指定されなかった場合、すべてのリソース制御が取得されます。
-s、-r、-x、-d、-e のいずれかを使ってタスク、プロジェクト、またはゾーンの基本リソース制御値を操作する場合、-p を使って受取人 pid を指定することができます。特定のタスク、プロジェクト、またはゾーン上で 1 つ以上の新しい基本リソース制御を設定する際に、-i idtype オプションの引数が process でない場合には -p オプションが必要となります。
リソース制御値をスペース文字で区切られた形式で表示します。
最初のリソース制御値 (-t privilege に一致するもの) を、-v オプションで指定された新しい値で置き換えます。
新しいリソース制御値を設定します。
このオプションは、 必ず -v とともに指定してください。
ユーザーが -t オプションを指定しなかった場合、基本特権が使用されます。基本のタスク資源制御、プロセス資源制御、またはゾーン資源制御を設定する場合、-p が必要になります。-e または -d も併せて指定された場合、新しい rctl へのアクションの設定も行われます。
-v が指定され、かつ -e、-d、-r、-x のいずれも指定されなかった場合、以前のリリースとの互換性を維持する目的でこのオプションが暗黙のうちに仮定されます。
リソース制御値の設定時に大きな値を表現するために使用可能な単位修飾子や倍率については、resource_controls(5) を参照してください。
設定するリソース制御タイプを指定します。「lowerable」フラグが設定されたリソース制御でない限り、特権付きリソース制御を変更できるのは、root と同等の特権を持つユーザー (または setuid プログラム) による呼び出しだけです。RCTL_GLOBAL_LOWERABLE フラグについては、rctlblk_set_value(3C) を参照してください。タイプが指定されなかった場合、basic が仮定されます。取得処理では、タイプが指定されなかった場合、system を含むすべてのリソース制御タイプの値が表示されます。
設定処理用として、リソース制御の値を指定します。value が指定されなかった場合、指定されたタイプのうち、最小の値を持つリソース制御に対して、変更 (削除、アクションの有効化、またはアクションの無効化) が実行されます。
リソース制御値の設定時に大きな値を表現するために使用可能な単位修飾子や倍率については、resource_controls(5) を参照してください。
指定されたリソース制御値を削除します。削除オプションが指定されなかった場合の prctl のデフォルト操作は、値や特権の一致したリソース制御値を変更するか、指定された特権を使って新しい値を挿入することです。一致条件の詳細については、setrctl(2) を参照してください。
-d、-e、-v、-x のいずれのオプションも指定されなかった場合、その呼び出しは取得処理とみなされます。
次のオペランドがサポートされています。
問い合わせるエンティティー (process、task、project、zone のいずれか) の ID。呼び出し元のユーザーの資格が特権付きでなく、かつ問い合わせ対象のエンティティーが所有している資格が異なっている場合、処理が失敗します。id が指定されなかった場合、エラーメッセージが返されます。
例 1 現在のリソース制御設定の表示
次の例では、現在のシェルが所属するタスクの現在のリソース制御設定を表示しています。
example$ ps -o taskid -p $$ TASKID 8 example$ prctl -i task 8 136150: /bin/ksh NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT task.max-cpu-time usage 8s system 18.4Es inf none - task.max-lwps usage 39 system 2.15G max deny - project.max-contracts privileged 10.0K - deny - project.max-locked-memory usage 0B privileged 508MB - deny - project.max-port-ids privileged 8.19K - deny - project.max-shm-memory privileged 508MB - deny - project.max-shm-ids privileged 128 - deny - project.max-msg-ids privileged 128 - deny - project.max-sem-ids privileged 128 - deny - project.max-crypto-memory usage 0B privileged 508MB - deny - project.max-tasks usage 2 system 2.15G max deny - project.max-lwps usage 39 system 2.15G max deny - project.cpu-shares usage 1 privileged 1 - none - zone.max-shm-memory system 16.0EB max deny - zone.max-shm-ids system 16.8M max deny - zone.max-sem-ids system 16.8M max deny - zone.max-msg-ids system 16.8M max deny - zone.max-lwps system 2.15G max deny - zone.cpu-shares privileged 1 - none - zone.max-locked-memory usage 0B privileged 508MB - deny -
例 2 特定の制御の値の表示、置換、および確認
次の例では、ある既存プロジェクト上の特定の制御の値を表示、置換、および確認しています。
example# prctl -n project.cpu-shares -i project group.staff project: 10: group.staff NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.cpu-shares usage 1 privileged 1 - none - system 65.5K max none - example# prctl -n project.cpu-shares -v 10 -r -i project group.staff example# prctl -n project.cpu-shares -i project group.staff project: 10: group.staff NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT project.cpu-shares usage 10 privileged 10 - none - system 65.5K max none -
例 3 リソースの調整
次の例では、project.max-locked-memory リソースを使用しています。
最初に、id -p を使用して、現在のシェルが所属しているプロジェクトを検出します。
/home/garfield> id -p uid=77880(garfield) gid=10(staff) projid=10(group.staff)
変更を行う前に、ターゲットプロジェクトを使用してリソースの制限値を識別します。
/home/garfield> prctl -n project.max-locked-memory -i project \ group.staff project 10: group.staff project.max-locked-memory privileged 256MB - deny - system 16.0EB max deny - current limit is 256 Megabytes.
次に、ターゲットプロジェクトに対して、project.max-locked-memory の制限を 300M バイトに調整します。
# prctl -n project.max-locked-memory -v 300M -r -i project group.staff
変更後のリソースの制限値が、新しい値 300M バイトを示しています。
# prctl -n project.max-locked-memory -i project group.staff project 10:group.staff project.max-locked-memory usage 200MG privileged 300MB - deny - system 16.0EB max deny -
例 4 プロジェクトの CPU キャップを変更する
prctl コマンドは、project.cpu-cap リソース制御 (resource_controls(5) を参照) を使用して、プロジェクトの CPU キャップを設定したり変更したりすることができます。(/etc/project ファイルでも同じリソース制御を使用できます。project(4) を参照) 次のコマンドは、user.smith を 3 つの CPU に制限するように CPU キャップを変更します。
# prctl -r -t privileged -n project.cpu-cap -v 300 -i project user.smith
上で使用されている prctl -r オプションは、プロジェクトまたはゾーンの CPU キャップを動的に変更するために使用されます。たとえば、次のコマンドは、前のコマンドで設定されたキャップを 80%に変更します。
# prctl -r -t privileged -n project.cpu-cap -v 80 -i project user.smith
CPU キャップを削除するには、次のように入力します。
# prctl -x -n project.cpu-cap $$
例 5 ゾーンの CPU キャップを変更する
prctl コマンドは、zone.cpu-cap リソース制御 (resource_controls(5) を参照) を使用して、ゾーンの CPU キャップを設定したり変更したりすることができます。(zonecfg(1M) コマンドでも同じリソース制御を操作できます。)次のコマンドは、大域ゾーンを CPU の 80%に制限するように CPU キャップを変更します。
# prctl -t privileged -n zone.cpu-cap -v 80 -i zone global
キャップを 50% に削減するには、次のコマンドを使用します。
# prctl -r -t privileged -n zone.cpu-cap -v 50 -i zone global
次の終了値が返されます。
成功。
致命的なエラーが発生しました。
無効なコマンド行オプションが指定されました。
プロセス情報および制御ファイル
属性についての詳細は、attributes(5) を参照してください。
|
コマンド行の構文は「確実」です。人間が読める形式の出力は「不確実」です。機械可読な出力は「確実」です。
rctladm(1M), zonecfg(1M), setrctl(2), rctlblk_get_local_action(3C), project(4), attributes(5), resource_controls(5)
ローカルアクションを許可するリソース制御ブロック上に設定可能な有効なシグナルは、SIGABRT、SIGXRES、SIGHUP、SIGSTOP、SIGTERM、および SIGKILL です。これに加え、CPU 時間関連の制御は SIGXCPU シグナルを発行でき、ファイルサイズ関連の制御は SIGXFSZ シグナルを送信できます。