Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

prctl(1)

名前

prctl - 実行中のプロセス、タスク、およびプロジェクトのリソース制御の取得または設定

形式

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 のいずれのオプションも指定されなかった場合、その呼び出しは取得処理とみなされます。それ以外の場合、それは変更処理とみなされます。

サポートしているオプションは、次のとおりです。

–d | –e action

–v–t、および –p で指定されたリソース制御値に対し、指定された action を無効 (–d) または有効 (–e) にします。–v–t–p のいずれかのオプションが指定されなかった場合、すべての値、特権、または受取人 pid に一致します。たとえば、–v のみが指定された場合、それに一致する値を持つ最初のリソース制御が変更されます。その際、すべての特権と受取人 pid に一致します。一致するリソース制御値が見つからなかった場合には、あたかも –s が指定されたかのように、新しい値が追加されます。

アクション:

all

このアクションは –d でのみ使用できます。これは、すべてのアクションを無効化します。これは、deny 大域フラグを持つリソース制御値では失敗します。

deny

プロセス、タスク、プロジェクト、またはゾーンからのリソース要求がリソース制御値を超えた場合に、リソース制御がその要求を拒否しようとすることを示します。no-deny 大域フラグを持つリソース制御では、deny アクションは有効にできません。deny 大域フラグを持つリソース制御では、deny アクションは無効にできません。

signal

このアクションは –d でのみ使用できます。これは、signal アクションを無効にします。

signal=signum

signal=signum アクションの signum は、シグナル番号 (またはシグナルの文字列表現) です。no-local-action 大域フラグを持つリソース制御上に signal アクションを設定すると、失敗します。送信可能なシグナルは限られています。詳細については、「注意事項」を参照してください。

–i idtype

ID オペランドのタイプを指定します。有効な idtype は、processtaskproject、または zone です。また、pidtaskidprojid、および zoneid も使用できます。–i オプションが省略された場合のデフォルトの ID タイプは、process です。

変更処理の場合、ID オペランドが所属するエンティティーが、ターゲットエンティティーになります。たとえば、–i process を指定して特定のプロジェクトリソース制御を設定した場合、指定された各プロセス引数が所属するプロジェクト上にそのリソース制御が設定されます。

取得処理の場合、ID オペランドが所属するすべてのエンティティーのリソース制御が、一覧表示されます。たとえば、–i task taskid と指定した場合、そのタスクのタスクリソース制御、プロジェクトリソース制御、およびゾーンリソース制御に加え、そのタスクが所属するプロジェクトとゾーンのリソース制御も一覧表示されます。

–n name

取得または設定するリソース制御の名前を指定します。name が指定されなかった場合、すべてのリソース制御が取得されます。

–p pid

–s–r–x–d–e のいずれかを使ってタスク、プロジェクト、またはゾーンの基本リソース制御値を操作する場合、–p を使って受取人 pid を指定することができます。特定のタスク、プロジェクト、またはゾーン上で 1 つ以上の新しい基本リソース制御を設定する際に、–i idtype オプションの引数が process でない場合には –p オプションが必要となります。

–P

リソース制御値をスペース文字で区切られた形式で表示します。

–r

最初のリソース制御値 (–t privilege に一致するもの) を、–v オプションで指定された新しい値で置き換えます。

–s

新しいリソース制御値を設定します。

このオプションは、 必ず –v とともに指定してください。

ユーザーが –t オプションを指定しなかった場合、基本特権が使用されます。基本のタスク資源制御、プロセス資源制御、またはゾーン資源制御を設定する場合、–p が必要になります。–e または –d も併せて指定された場合、新しい rctl へのアクションの設定も行われます。

–v が指定され、かつ –e–d–r–x のいずれも指定されなかった場合、以前のリリースとの互換性を維持する目的でこのオプションが暗黙のうちに仮定されます。

リソース制御値の設定時に大きな値を表現するために使用可能な単位修飾子や倍率については、resource-controls(5) を参照してください。

–t [ basic | privileged | system ]

設定するリソース制御タイプを指定します。「lowerable」フラグが設定されたリソース制御でない限り、特権付きリソース制御を変更できるのは、root と同等の特権を持つユーザー (または setuid プログラム) による呼び出しだけです。RCTL_GLOBAL_LOWERABLE フラグについては、rctlblk_set_value(3C) を参照してください。タイプが指定されなかった場合、basic が仮定されます。取得処理では、タイプが指定されなかった場合、system を含むすべてのリソース制御タイプの値が表示されます。

–v value

設定処理用として、リソース制御の値を指定します。value が指定されなかった場合、指定されたタイプのうち、最小の値を持つリソース制御に対して、変更 (削除、アクションの有効化、またはアクションの無効化) が実行されます。

リソース制御値の設定時に大きな値を表現するために使用可能な単位修飾子や倍率については、resource-controls(5) を参照してください。

–x

指定されたリソース制御値を削除します。削除オプションが指定されなかった場合の prctl のデフォルト操作は、値や特権の一致したリソース制御値を変更するか、指定された特権を使って新しい値を挿入することです。一致条件の詳細については、setrctl(2) を参照してください。

–d–e–v–x のいずれのオプションも指定されなかった場合、その呼び出しは取得処理とみなされます。

オペランド

次のオペランドを指定できます。

id

問い合わせるエンティティー (processtaskprojectzone のいずれか) の 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

終了ステータス

次の終了ステータスが返されます。

0

成功。

1

致命的なエラーが発生しました。

2

無効なコマンド行オプションが指定された。

ファイル

/proc/pid/*

プロセス情報および制御ファイル

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
下記を参照。

コマンド行の構文は「確実」です。人間が読める形式の出力は「不確実」です。機械可読な出力は「確実」です。

関連項目

rctladm(1M), zonecfg(1M), setrctl(2), rctlblk_get_local_action(3C), project(4), attributes(5), resource-controls(5)

ローカルアクションを許可するリソース制御ブロック上に設定可能な有効なシグナルは、SIGABRTSIGXRESSIGHUPSIGSTOPSIGTERM、および SIGKILL です。これに加え、CPU 時間関連の制御は SIGXCPU シグナルを発行でき、ファイルサイズ関連の制御は SIGXFSZ シグナルを送信できます。