PRIOCNTL(1)                     User Commands                    PRIOCNTL(1)
NAME
       priocntl - display or set scheduling parameters of specified
       process(es)
SYNOPSIS
       priocntl -l       priocntl -d [
-i idtype] [
idlist]       
priocntl -s [
-c class] [
class-specific options]
            [
-i idtype] [
idlist]       
priocntl -e [
-c class] [
class-specific options] 
command            [
argument(s)]
DESCRIPTION
       The 
priocntl command displays or sets scheduling parameters of the
       specified process(es). It can also be used to display the current
       configuration information for the system's process scheduler or
       execute a command with specified scheduling parameters.
       Processes fall into distinct classes with a separate scheduling
       policy applied to each class. The process classes currently supported
       are the real-time class, time-sharing class, interactive class, fair-
       share class, and the fixed priority class. The characteristics of
       these classes and the class-specific options they accept are
       described below in the USAGE section under the headings 
Real-Time       Class, 
Time-Sharing Class, 
Inter-Active Class, 
Fair-Share Class, and       
Fixed-Priority Class. With appropriate permissions, the 
priocntl       command can change the class and other scheduling parameters
       associated with a running process.
       In the default configuration, a runnable real-time process runs
       before any other process. Therefore, inappropriate use of real-time
       processes can have a dramatic negative impact on system performance.
       If an 
idlist is present, it must appear last on the command line and
       the elements of the list must be separated by white space. If no       
idlist is present, an 
idtype argument of 
pid, 
ppid, 
pgid, 
sid,       
taskid, 
class, 
uid, 
gid, 
projid, or 
zoneid specifies the process 
ID,
       parent process 
ID, process group 
ID, session 
ID, task 
ID, class, user       
ID, group 
ID, project 
ID, or zone 
ID, respectively, of the 
priocntl       command itself.
       The command         
priocntl -d [-i idtype] [
idlist]
       displays the class and class-specific scheduling parameters of the
       process(es) specified by 
idtype and 
idlist.
       The command         
priocntl -s [-c class] [
class-specific options] \
              [-i 
idtype] [
idlist]
       sets the class and class-specific parameters of the specified
       processes to the values given on the command line. The 
-c class       option specifies the class to be set. (The valid 
class arguments are       
RT for real-time, 
TS for time-sharing, 
IA for inter-active, 
FSS for
       fair-share, or 
FX for fixed-priority.)
       The class-specific parameters to be set are specified by the class-
       specific options as explained under the appropriate heading below. If
       the 
-c class option is omitted, 
idtype and 
idlist must specify a set
       of processes which are all in the same class, otherwise an error
       results. If no class-specific options are specified, the process's
       class-specific parameters are set to the default values for the class
       specified by 
-c class (or to the default parameter values for the
       process's current class if the 
-c class option is also omitted).
       In order to change the scheduling parameters of a process using       
priocntl the real or effective user 
ID (respectively, groupID) of the
       user invoking 
priocntl must match the real or effective user 
ID       (respectively, groupID) of the receiving process or the effective
       user 
ID of the user must be super-user. These are the minimum
       permission requirements enforced for all classes. An individual class
       can impose additional permissions requirements when setting processes
       to that class or when setting class-specific scheduling parameters.
       When 
idtype and 
idlist specify a set of processes, 
priocntl acts on
       the processes in the set in an implementation-specific order. If       
priocntl encounters an error for one or more of the target processes,
       it can or cannot continue through the set of processes, depending on
       the nature of the error.
       If the error is related to permissions, 
priocntl prints an error
       message and then continues through the process set, resetting the
       parameters for all target processes for which the user has
       appropriate permissions. If 
priocntl encounters an error other than
       permissions, it does not continue through the process set but prints
       an error message and exits immediately.
       A special 
sys scheduling class exists for the purpose of scheduling
       the execution of certain special system processes (such as the
       swapper process). It is not possible to change the class of any
       process to 
sys. In addition, any processes in the 
sys class that are
       included in the set of processes specified by 
idtype and 
idlist are
       disregarded by 
priocntl.  For example, if 
idtype were 
uid, an 
idlist       consisting of a zero would specify all processes with a 
UID of 
0,
       except processes in the 
sys class and (if changing the parameters
       using the 
-s option) the 
init process.
       The 
init process (process 
ID 1) is a special case. In order for the       
priocntl command to change the class or other scheduling parameters
       of the 
init process, 
idtype must be 
pid and 
idlist must be consist of
       only a 
1. The 
init process can be assigned to any class configured on
       the system, but the time-sharing class is almost always the
       appropriate choice. Other choices can be highly undesirable; see the       
System Administration Guide: Basic Administration for more
       information.
       The command         
priocntl -e [-c class] [class-specific options] 
command \
              [
argument...]
       executes the specified command with the class and scheduling
       parameters specified on the command line (
arguments are the arguments
       to the command). If the 
-c class option is omitted the command is run
       in the user's current class.
OPTIONS
       The following options are supported:       
-c class                    Specifies the 
class to be set. (The valid 
class                    arguments are 
RT for real-time, 
TS for time-sharing, 
IA                    for inter-active, 
FSS for fair-share, or 
FX for fixed-
                    priority.) If the specified class is not already
                    configured, it is automatically configured.       
-d                    Displays the scheduling parameters associated with a set
                    of processes.       
-e                    Executes a specified command with the class and
                    scheduling parameters associated with a set of
                    processes.       
-i idtype                    This option, together with the 
idlist arguments (if
                    any), specifies one or more processes to which the                    
priocntl command is to apply. The interpretation of                    
idlist depends on the value of 
idtype. If the 
-i idtype                    option is omitted when using the 
-d or 
-s options the
                    default 
idtype of 
pid is assumed.
                    The valid 
idtype arguments and corresponding
                    interpretations of 
idlist are as follows:                    
-i all                                 The 
priocntl command applies to all
                                 existing processes. No 
idlist should be
                                 specified (if one is specified, it is
                                 ignored). The permission restrictions
                                 described below still apply.                    
-i ctid                                 idlist is a list of process contract IDs.
                                 The 
priocntl command applies to all
                                 processes with a process contract ID equal
                                 to an ID from the list.                    
-i class                                 idlist consists of a single class name (
RT                                 for real-time, 
TS for time-sharing, 
IA for
                                 inter-active, 
FSS for fair-share, or 
FX for
                                 fixed-priority). The 
priocntl command
                                 applies to all processes in the specified
                                 class.                    
-i gid                                 idlist is a list of group 
IDs. The 
priocntl                                 command applies to all processes with an
                                 effective group 
ID equal to an 
ID from the
                                 list.                    
-i pgid                                 idlist is a list of process group 
IDs. The                                 
priocntl command applies to all processes
                                 in the specified process groups.                    
-i pid                                 idlist is a list of process 
IDs. The                                 
priocntl command applies to the specified
                                 processes.                    
-i ppid                                 idlist is a list of parent process 
IDs. The                                 
priocntl command applies to all processes
                                 whose parent process 
ID is in the list.                    
-i projid                                 idlist is a list of project 
IDs. The                                 
priocntl command applies to all processes
                                 with an effective project 
ID equal to an 
ID                                 from the list.                    
-i sid                                 idlist is a list of session 
IDs. The                                 
priocntl command applies to all processes
                                 in the specified sessions.                    
-i taskid                                 idlist is a list of task 
IDs. The 
priocntl                                 command applies to all processes in the
                                 specified tasks.                    
-i uid                                 idlist is a list of user 
IDs. The 
priocntl                                 command applies to all processes with an
                                 effective user 
ID equal to an 
ID from the
                                 list.                    
-i zoneid                                 idlist is a list of zone 
IDs. The 
priocntl                                 command applies to all processes with an
                                 effective zone 
ID equal to an 
ID from the
                                 list.       
-l                    Displays a list of the classes currently configured in
                    the system along with class-specific information about
                    each class. The format of the class-specific information
                    displayed is described under USAGE.       
-s                    Sets the scheduling parameters associated with a set of
                    processes.
       The valid class-specific options for setting real-time parameters
       are:       
-p rtpri                            Sets the real-time priority of the specified
                            process(es) to 
rtpri.       
-t tqntm [
-r res]
                            Sets the time quantum of the specified
                            process(es) to 
tqntm. You can optionally specify
                            a resolution as explained below.       
-q tqsig                            Sets the real-time time quantum signal of the
                            specified process(es) to 
tqsig.
       The valid class-specific options for setting time-sharing parameters
       are:       
-m tsuprilim                       Sets the user priority limit of the specified
                       process(es) to 
tsuprilim.       
-p tsupri                       Sets the user priority of the specified process(es)
                       to 
tsupri.
       The valid class-specific options for setting inter-active parameters
       are:       
-m iauprilim                       Sets the user priority limit of the specified
                       process(es) to 
iauprilim.       
-p iaupri                       Sets the user priority of the specified process(es)
                       to 
iaupri.
       The valid class-specific options for setting fair-share parameters
       are:       
-m fssuprilim                        Sets the user priority limit of the specified
                        process(es) to 
fssuprilim.       
-p fssupri                        Sets the user priority of the specified process(es)
                        to 
fssupri.
       The valid class-specific options for setting fixed-priority
       parameters are:       
-m fxuprilim                       Sets the user priority limit of the specified
                       process(es) to 
fxuprilim.       
-p fxupri                       Sets the user priority of the specified process(es)
                       to 
fxupri.       
-t tqntm                       [
-r res] Sets the time quantum of the specified
                       process(es) to 
tqntm. You can optionally specify a
                       resolution as explained below.
USAGE
   Real-Time Class       The real-time class provides a fixed priority preemptive scheduling
       policy for those processes requiring fast and deterministic response
       and absolute user/application control of scheduling priorities. If
       the real-time class is configured in the system, it should have
       exclusive control of the highest range of scheduling priorities on
       the system. This ensures that a runnable real-time process is given       
CPU service before any process belonging to any other class.
       The real-time class has a range of real-time priority (
rtpri) values
       that can be assigned to processes within the class. Real-time
       priorities range from 0 to 
x, where the value of 
x is configurable
       and can be displayed for a specific installation that has already
       configured a real-time scheduler, by using the command         
priocntl -l       The real-time scheduling policy is a fixed priority policy. The
       scheduling priority of a real-time process never changes except as
       the result of an explicit request by the user/application to change
       the 
rtpri value of the process.
       For processes in the real-time class, the 
rtpri value is, for all
       practical purposes, equivalent to the scheduling priority of the
       process. The 
rtpri value completely determines the scheduling
       priority of a real-time process relative to other processes within
       its class. Numerically higher 
rtpri values represent higher
       priorities. Since the real-time class controls the highest range of
       scheduling priorities in the system, it is guaranteed that the
       runnable real-time process with the highest 
rtpri value is always
       selected to run before any other process in the system.
       In addition to providing control over priority, 
priocntl provides for
       control over the length of the time quantum allotted to processes in
       the real-time class. The time quantum value specifies the maximum
       amount of time a process can run, assuming that it does not complete
       or enter a resource or event wait state (
sleep). Notice that if
       another process becomes runnable at a higher priority, the currently
       running process can be preempted before receiving its full time
       quantum.
       The command         
priocntl -d [-i idtype] [
idlist]
       displays the real-time priority, time quantum (in millisecond
       resolution), and time quantum signal value for each real-time process
       in the set specified by 
idtype and 
idlist.
       Any combination of the 
-p, 
-t [
-r], and 
-q options can be used with       
priocntl -s or 
priocntl -e for the real-time class. If an option is
       omitted and the process is currently real-time, the associated
       parameter is unaffected. If an option is omitted when changing the
       class of a process to real-time from some other class, the associated
       parameter is set to a default value. The default value for 
rtpri is 
0       and the default for time quantum is dependent on the value of 
rtpri       and on the system configuration; see 
rt_dptbl(5).
       When using the 
-t tqntm option, you can optionally specify a
       resolution using the 
-r res option. (If no resolution is specified,
       millisecond resolution is assumed.) If 
res is specified, it must be a
       positive integer between 
1 and 
1,000,000,000 inclusively and the
       resolution used is the reciprocal of 
res in seconds. For example,
       specifying 
-t 10 -r 100 would set the resolution to hundredths of a
       second and the resulting time quantum length would be 10/100 seconds
       (one tenth of a second). Although very fine (nanosecond) resolution
       can be specified, the time quantum length is rounded up by the system
       to the next integral multiple  of the system clock's resolution.
       Requests for time quantums of zero or quantums greater than the
       (typically very large) implementation-specific maximum quantum result
       in an error.
       The real-time time quantum signal can be used to notify runaway real-
       time processes about the consumption of their time quantum. Those
       processes, which are monitored by the real-time time quantum signal,
       receive the configured signal in the event of time quantum
       expiration. The default value (
0) of the time quantum signal 
tqsig       denotes no signal delivery. A positive value denotes the delivery of
       the signal specified by the value. Like 
kill(1) and other commands
       operating on signals, the 
-q tqsig option is also able to handle
       symbolically named signals, like 
XCPU or 
KILL.
       In order to change the class of a process to real-time (from any
       other class), the user invoking 
priocntl must have super-user
       privilege. In order to change the 
rtpri value or time quantum of a
       real-time process, the user invoking 
priocntl must either be super-
       user, or must currently be in the real-time class (shell running as a
       real-time process) with a real or effective user 
ID matching the real
       or effective user 
ID of the target process.
       The real-time priority, time quantum, and time quantum signal are
       inherited across the 
fork(2) and 
exec(2) system calls. When using the
       time quantum signal with a user defined signal handler across the       
exec(2) system call, the new image must install an appropriate user
       defined signal handler before the time quantum expires. Otherwise,
       unpredictable behavior would result.   
Time-Sharing Class       The time-sharing scheduling policy provides for a fair and effective
       allocation of the 
CPU resource among processes with varying 
CPU       consumption characteristics. The objectives of the time-sharing
       policy are to provide good response time to interactive processes and
       good throughput to 
CPU-bound jobs, while providing a degree of
       user/application control over scheduling.
       The time-sharing class has a range of time-sharing user priority
       (
tsupri) values that can be assigned to processes within the class.
       User priorities range from -
x to +
x, where the value of 
x is
       configurable.  The range for a specific installation can be displayed
       by using the command         
priocntl -l       The purpose of the user priority is to provide some degree of
       user/application control over the scheduling of processes in the
       time-sharing class. Raising or lowering the 
tsupri value of a process
       in the time-sharing class raises or lowers the scheduling priority of
       the process. It is not guaranteed, however, that a time-sharing
       process with a higher 
tsupri value runs before one with a lower       
tsupri value. This is because the 
tsupri value is just one factor
       used to determine the scheduling priority of a time-sharing process.
       The system can dynamically adjust the internal scheduling priority of
       a time-sharing process based on other factors such as recent 
CPU       usage.
       In addition to the system-wide limits on user priority (displayed
       with 
priocntl -l), there is a per process user priority limit
       (
tsuprilim), which specifies the maximum 
tsupri value that can be set
       for a given process.
       The command         
priocntl -d [-i idtype] [
idlist]
       displays the user priority and user priority limit for each time-
       sharing process in the set specified by 
idtype and 
idlist.
       Any time-sharing process can lower its own 
tsuprilim (or that of
       another process with the same user 
ID). Only a time-sharing process
       with super-user privilege can raise a 
tsuprilim. When changing the
       class of a process to time-sharing from some other class, super-user
       privilege is required in order to set the initial 
tsuprilim to a
       value greater than zero.
       Any time-sharing process can set its own 
tsupri (or that of another
       process with the same user 
ID) to any value less than or equal to the
       process's 
tsuprilim. Attempts to set the 
tsupri above the 
tsuprilim       (and/or set the 
tsuprilim below the 
tsupri) result in the 
tsupri       being set equal to the 
tsuprilim.
       Any combination of the 
-m and 
-p options can be used with 
priocntl -s       or 
priocntl -e for the time-sharing class.  If an option is omitted
       and the process is currently time-sharing, the associated parameter
       is normally unaffected. The exception is when the 
-p option is
       omitted and 
-m is used to set a 
tsuprilim below the current 
tsupri.
       In this case, the 
tsupri is set equal to the 
tsuprilim which is being
       set. If an option is omitted when changing the class of a process to
       time-sharing from some other class, the associated parameter is set
       to a default value. The default value for 
tsuprilim is 
0 and the
       default for 
tsupri is to set it equal to the 
tsuprilim value which is
       being set.
       The time-sharing user priority and user priority limit are inherited
       across the 
fork(2) and 
exec(2) system calls.   
Inter-Active Class       The inter-active scheduling policy provides for a fair and effective
       allocation of the 
CPU resource among processes with varying 
CPU       consumption characteristics while providing good responsiveness for
       user interaction. The objectives of the inter-active policy are to
       provide good response time to interactive processes and good
       throughput to 
CPU-bound jobs. The priorities of processes in the
       inter-active class can be changed in the same manner as those in the
       time-sharing class, though the modified priorities continue to be
       adjusted to provide good responsiveness for user interaction.
       The inter-active user priority limit, 
iaupri, is equivalent to       
tsupri. The inter-active per process user priority, 
iauprilim, is
       equivalent to 
tsuprilim.
       Inter-active class processes that have the 
iamode ("interactive
       mode") bit set are given a priority boost value of 
10, which is
       factored into the user mode priority of the process when that
       calculation is made, that is, every time a process's priority is
       adjusted. This feature is used by the X windowing system, which sets
       this bit for those processes that run inside of the current active
       window to give them a higher priority.   
Fair-Share Class       The fair-share scheduling policy provides a fair allocation of system       
CPU resources among projects, independent of the number of processes
       they own.  Projects are given "shares" to control their entitlement
       to 
CPU resources. Resource usage is remembered over time, so that
       entitlement is reduced  for heavy usage, and increased for light
       usage, with respect to other projects. 
CPU time is scheduled among
       processes according to their owner's entitlements, independent of the
       number of processes each project owns.
       The 
FSS scheduling class supports the notion of per-process user
       priority and user priority limit for compatibility with the time-
       share scheduler. The fair share scheduler attempts to provide an
       evenly graded effect across the whole range of user priorities.
       Processes with negative 
fssupri values receive time slices less
       frequently than normal,  while processes with positive 
fssupri values
       receive time slices more  frequently than normal.  Notice that user
       priorities do not interfere with shares. That is, changing a 
fssupri       value of a process is not going to affect its project's overall 
CPU       usage which only relates to the amount of shares it is allocated
       compared to other projects.
       The priorities of processes in the fair-share class can be changed in
       the same manner as those in the time-share class.   
Fixed-Priority Class       The fixed-priority class provides a fixed priority preemptive
       scheduling policy for those processes requiring that the scheduling
       priorities do not get dynamically adjusted by the system and that the
       user/application have control of the scheduling priorities.
       The fixed-priority class shares the same range of scheduling
       priorities with the time-sharing class, by default. The fixed-
       priority class has a range of fixed-priority user priority (
fxupri)
       values that can be assigned to processes within the class. User
       priorities range from 0 to 
x, where the value of 
x is configurable.
       The range for a specific installation can be displayed by using the
       command         
priocntl -l       The purpose of the user priority is to provide user/application
       control over the scheduling of processes in the fixed-priority class.
       For processes in the fixed-priority class, the 
fxupri value is, for
       all practical purposes, equivalent  to the scheduling priority of the
       process. The 
fxupri value completely determines the scheduling
       priority of a fixed-priority process relative to other processes
       within its class. Numerically higher 
fxupri values represent higher
       priorities.
       In addition to the system-wide limits on user priority (displayed
       with 
priocntl  -l), there is a per process user priority  limit
       (
fxuprilim), which specifies the maximum 
fxupri value that can be set
       for a given process.
       Any fixed-priority process can lower its own 
fxuprilim (or that of
       another process with the same user 
ID). Only a process with super-
       user privilege can raise a 
fxuprilim. When changing the class of a
       process to fixed-priority from some other class, super-user privilege
       is required in order to set the initial 
fxuprilim to a value greater
       than zero.
       Any fixed-priority process can set its own 
fxupri (or that of another
       process with the same user 
ID) to any value less than or equal to the
       process's 
fxuprilim. Attempts to set the 
fxupri above the 
fxuprilim       (or set the 
fxuprilim below the 
fxupri) result in the 
fxupri being
       set equal to the 
fxuprilim.
       In addition to providing control over priority, 
priocntl provides for
       control over the length of the time quantum allotted to processes in
       the fixed-priority class. The time quantum value specifies the
       maximum amount of time a process can run, before surrendering the       
CPU, assuming that it does not complete or enter a resource or event
       wait state (sleep). Notice that if another process becomes runnable
       at a higher priority, the currently running process can be preempted
       before receiving its full time quantum.
       Any combination of the 
-m, 
-p, and 
-t options can be used with       
priocntl -s or 
priocntl -e for the fixed-priority class. If an option
       is omitted and the process is currently fixed-priority, the
       associated parameter is normally unaffected. The exception is when
       the 
-p option is omitted and the 
-m option is used to set a 
fxuprilim       below the current 
fxupri. In this case, the 
fxupri is set equal to
       the 
fxuprilim which is being set. If an option is omitted when
       changing the class of a process to fixed-priority from some other
       class, the associated parameter is set to a default value. The
       default value for 
fxuprilim is 
0. The default for 
fxupri is to set it
       equal to the 
fxuprilim value which is being set. The default for time
       quantum is dependent on the 
fxupri and on the system configuration.
       See 
fx_dptbl(5).
       The time quantum of processes in the fixed-priority class      can be
       changed in the same manner as those in the real-time class.
       The fixed-priority user priority, user priority limit, and time
       quantum are inherited across the 
fork(2) and 
exec(2) system calls.
EXAMPLES
       The following are real-time class examples:
       Example 1: Setting the Class
       The following example sets the class of any non-real-time processes
       selected by 
idtype and 
idlist to real-time and sets their real-time
       priority to the default value of 
0. The real-time priorities of any
       processes currently in the real-time class are unaffected. The time
       quantums of all of the specified processes are set to 
1/10 seconds.
         example% 
priocntl -s -c RT -t 1 -r 10 -i idtype idlist       Example 2: Executing a Command in Real-time
       The following example executes 
command in the real-time class with a
       real-time priority of 
15 and a time quantum of 
20 milliseconds:
         example% 
priocntl -e -c RT -p 15 -t 20 command       Example 3: Executing a Command in Real-time with a Specified Quantum
       Signal
       The following example executes 
command in the real-time class with a
       real-time priority of 
11, a time quantum of 
250 milliseconds, and
       where the specified real-time quantum signal is 
SIGXCPU:
         example% 
priocntl -e -c RT -p 11 -t 250 -q XCPU command       The following are time-sharing class examples:
       Example 4: Setting the Class of non-time-sharing Processes
       The following example sets the class of any non-time-sharing
       processes selected by 
idtype and 
idlist to time-sharing and sets both
       their user priority limit and user priority to 
0. Processes already
       in the time-sharing class are unaffected.
         example% 
priocntl -s -c TS -i idtype idlist       Example 5: Executing a Command in the Time-sharing Class
       The following example executes 
command with the arguments 
arguments       in the time-sharing class with a user priority limit of 
0 and a user
       priority of 
-15:
         example% 
priocntl -e -c TS -m 0 -p -15 command [
arguments]
       Example 6: Executing a Command in Fixed-Priority Class
       The following example executes a command in the fixed-priority  class
       with a user priority limit of 
20 and user priority of 
10 and time
       quantum of 
250 milliseconds:
         example% 
priocntl -e -c FX -m 20 -p 10 -t 250 commandEXIT STATUS
       The following exit values are returned:
       For options 
-d, 
-l, and 
-s:       
0            Successful operation.       
1            Error condition.
       For option 
-e:
       Return of the Exit Status of the executed command denotes successful
       operation.  Otherwise,       
1            Command could not be executed at the specified priority.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +---------------+-----------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
       +---------------+-----------------+
       |CSI            | Enabled         |
       +---------------+-----------------+
SEE ALSO
       kill(1), 
nice(1), 
ps(1), 
exec(2), 
fork(2), 
priocntl(2), 
FSS(4),       
fx_dptbl(5), 
process(5), 
rt_dptbl(5), 
attributes(7), 
zones(7),       
dispadmin(8)       System Administration Guide: Basic AdministrationDIAGNOSTICS
       priocntl prints the following error messages:       
Process(es) not found           None of the specified processes exists.       
Specified processes from different classes           The 
-s option is being used to set parameters, the 
-c class           option is not present, and processes from more than one class are
           specified.       
Invalid option or argument           An unrecognized or invalid option or option argument is used.
                                April 1, 2008                    PRIOCNTL(1)