PRCTL(1)                        User Commands                       PRCTL(1)
NAME
       prctl - get or set the resource controls of running processes, tasks,
       and projects
SYNOPSIS
       prctl [
-P] [
-t [basic | privileged | system]]
            [
-n name [
-srx] [
-v value] [
-e | 
-d action] [
-p pid]]
            [
-i idtype] 
id...
DESCRIPTION
       The 
prctl utility allows the examination and modification of the
       resource controls associated with an active process, task, or project
       on the system. It allows access to the  basic and privileged limits
       and the  current  usage  on the     specified entity.
       See 
resource_controls(7) for a description of the resource controls
       supported in the current release of the Solaris operating system.
OPTIONS
       The following options are supported:       
-d | 
-e action           Disables (
-d) or enables (
-e) the specified 
action on the
           resource control value specified by 
-v, 
-t, and 
-p. If any of the           
-v, 
-t, or 
-p options are unspecified, they match any value,
           privilege, or recipient pid. For example, specifying only 
-v           modifies the first resource control with matching value, matching
           any privilege and recipient pid. If no matching resource control
           value is found, a new value is added as if 
-s were specified.           
Actions:           all                            This action is only available with 
-d. It
                            disables all actions. This fails on resource
                            control values that have the 
deny global flag.           
deny                            Indicates that the resource control attempts to
                            deny granting the resource to the process, task,
                            project, or zone on a request for resources in
                            excess of the resource control value. 
deny                            actions can not be enabled if the resource
                            control has the 
no-deny global flag. 
deny                            actions can not be disabled if the resource
                            control has the 
deny global flag.           
signal                            This action is only available with 
-d. It
                            deactivates the 
signal action.           
signal=
signum                            In the 
signal=signum action, 
signum is a signal
                            number (or string representation of a signal).
                            Setting a 
signal action on a resource control
                            with the 
no-local-action global flag fails. A
                            limited set of signals can be sent. See 
NOTES                            for additional details.       
-i idtype           Specifies the type of the id operands. Valid 
idtypes are 
process,           
task, 
project, or 
zone. Also allowed are 
pid, 
taskid, 
projid, and           
zoneid. The default id type, if the 
-i option is omitted, is           
process.
           For a modify operation, the entity to which id operands are
           members is the target entity. For instance, setting a project
           resource control on an 
-i process sets the resource control on
           the project to which each given process argument is a member.
           For a get operation, the resource controls are listed for all
           entities to which the id operands are members. For example, 
-i           task taskid lists the task, project, and zone resource controls
           for the task, and for the project and zone to which that task is
           a member.       
-n name           Specifies the name of the resource control to get or set. If the           
name is unspecified, all resource controls are retrieved.       
-p pid           When manipulating (using 
-s, 
-r, 
-x, 
-d, or 
-e) a basic task
           project, or zone resource control values, a recipient 
pid can be
           specified using 
-p. When setting a new basic resource control or
           controls on a task, project, or zone, the 
-p option is required
           if the 
-i idtype option argument is not 
process.       
-P           Display resource control values in space delimited format.       
-r           Replaces the first resource control value (matching with the 
-t           privilege) with the new value specified through the 
-v option.       
-s           Set a new resource control value.
           This option requires the 
-v option.
           If you do not specify the 
-t option, basic privilege is used. If
           you want to set a basic task, process, or zone rctl, 
-p is
           required. If 
-e or 
-d are also specified, the action on the new           
rctl is set as well.
           For compatibility with prior releases, this option is implied if           
-v is specified, without any of 
-e, 
-d, 
-r, or 
-x.
           See 
resource_controls(7) for a description of unit modifiers and
           scaling factors you can use to express large values when setting
           a resource control value.       
-t [ 
basic | 
privileged | 
system ]
           Specifies which resource control type to set. Unless the
           "lowerable" flag is set for a resource control, only invocations
           by users (or setuid programs) who have privileges equivalent to
           those of root can modify privileged resource controls. See           
rctlblk_set_value(3C) for a description of the           
RCTL_GLOBAL_LOWERABLE flag. If the type is not specified, 
basic           is assumed. For a get operation, the values of all resource
           control types, including 
system, are displayed if no type is
           specified.       
-v value           Specifies the value for the resource control for a set operation.
           If no 
value is specified, then the modification (deletion, action
           enabling or disabling) is carried out on the lowest-valued
           resource control with the given type.
           See 
resource_controls(7) for a description of unit modifiers and
           scaling factors you can use to express large values when setting
           a resource control value.       
-x           Deletes the specified resource control value. If the delete
           option is not provided, the default operation of 
prctl is to
           modify a resource control value of matching value and privilege,
           or insert a new value with the given privilege. The matching
           criteria are discussed more fully in 
setrctl(2).
       If none of the 
-s, 
-r, 
-x, 
-v, 
-d, or 
-e options are specified, the
       invocation is considered a get operation. Otherwise, it is considered
       a modify operation.
OPERANDS
       The following operand is supported:       
id             The 
ID of the entity (
process, 
task, 
project, or 
zone) to
             interrogate. If the invoking user's credentials are
             unprivileged and the entity being interrogated possesses
             different credentials, the operation fails. If no 
id is
             specified, an error message is returned.
EXAMPLES
       Example 1: Displaying Current Resource Control Settings
       The following example displays current resource control settings for
       a task to which the current shell belongs:
          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-processes
                 usage              30
                 system          2.15G     max   deny                -
         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-processes
                  usage             30
                 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-processes
                 system          2.15G     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                -
       Example 2: Displaying, Replacing, and Verifying the Value of a
       Specific Control
       The following examples displays, replaces, and verifies the value of
       a specific control on an existing project:
         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                         -
       Example 3: Adjusting Resources
       The following example uses the 
project.max-locked-memory resource.
       First, use 
id -p to find out which project the current shell is a
       member of:
         /home/garfield> id -p
                   uid=77880(garfield) gid=10(staff) projid=10(group.staff)
       Using the target project, identify the resource limit value before
       the change:
         /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.
       Next, adjust the 
project.max-locked-memory limit to 300 Megabytes for
       the target project:
         # prctl -n project.max-locked-memory -v 300M -r -i project group.staff
       The resource limit value after the change shows a new value of 300
       Megabytes:
         # 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                           -
       Example 4: Modifying CPU Caps for a Project
       The 
prctl command can use the 
project.cpu-cap resource control (see       
resource_controls(7)) to set and modify CPU caps for a project. (The
       same resource control can be used in the 
/etc/project file. See       
project(5)) The following command modifies the CPU cap to limit       
user.smith  to three CPUs:
         # 
prctl -r -t privileged -n project.cpu-cap -v 300 -i project user.smith       The 
prctl -r option, used above, is used to dynamically change a CPU
       cap for a project or zone. For example, the following command will
       change the cap set in the preceding command to 80 percent:
         # 
prctl -r -t privileged -n project.cpu-cap -v 80 -i project user.smith       To remove a CPU cap, enter:
         # 
prctl -x -n project.cpu-cap $$       Example 5: Modifying CPU Caps for a Zone
       The 
prctl command can use the 
zone.cpu-cap resource control (see       
resource_controls(7)) to set and modify CPU caps for a zone. (The
       same resource control can be manipulated using the 
zonecfg(8)       command.) The following command modifies the CPU cap to limit the
       global zone to 80 percent of a CPU:
         # 
prctl -t privileged -n zone.cpu-cap -v 80 -i zone global       The cap can be lowered to 50% using:
         # 
prctl -r -t privileged -n zone.cpu-cap -v 50 -i zone globalEXIT STATUS
       The following exit values are returned:       
0            Success.       
1            Fatal error encountered.       
2            Invalid command line options were specified.
FILES
       /proc/pid/*                      Process information and control files
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | See below.      |
       +--------------------+-----------------+
       The command-line syntax is Committed. The human-readable output is
       Uncommitted.  The parsable output is Committed.
SEE ALSO
       setrctl(2), 
rctlblk_get_local_action(3C), 
project(5), 
attributes(7),       
resource_controls(7), 
rctladm(8), 
zonecfg(8)NOTES
       The valid signals that can be set on a resource control block
       allowing local actions are 
SIGABRT, 
SIGXRES, 
SIGHUP, 
SIGSTOP,       
SIGTERM, and 
SIGKILL. Additionally, CPU time related controls can
       issue the 
SIGXCPU signal, and file size related controls can send the       
SIGXFSZ signal.
                              January 23, 2021                      PRCTL(1)