Changing the Scheduling Priority of Processes With priocntl
The scheduling priority of a process is the priority it is assigned by the process scheduler, according to scheduling policies. The dispadmin command lists the default scheduling policies.
You can use the priocntl command to assign processes to a priority class and to manage process priorities. For instructions on using the priocntl command to manage processes, see "How to Designate a Process Priority".
How to Display Basic Information About Process Classes
You can display process scheduling classes and priority ranges with the priocntl -l command.
$ priocntl -l |
Example--Getting Basic Information About Process Classes
The following example shows output from the priocntl -l command.
# priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range: -60 through 60 IA (Interactive) Configured IA User Priority Range: -60 through 60 RT (Real Time) Maximum Configured RT Priority: 59 |
How to Display the Global Priority of a Process
You can display the global priority of a process by using the ps command.
$ ps -ecl |
The global priority is listed under the PRI column.
Example--Displaying the Global Priority of a Process
The following example shows ps -ecl command output. The values in the PRI column show that the pageout process has the highest priority, while sh has the lowest.
$ ps -ecl F S UID PID PPID CLS PRI ADDR SZ WCHAN TTY TIME COMD 19 T 0 0 0 SYS 96 f00d05a8 0 ? 0:03 sched 8 S 0 1 0 TS 50 ff0f4678 185 ff0f4848 ? 36:51 init 19 S 0 2 0 SYS 98 ff0f4018 0 f00c645c ? 0:01 pageout 19 S 0 3 0 SYS 60 ff0f5998 0 f00d0c68 ? 241:01 fsflush 8 S 0 269 1 TS 58 ff0f5338 303 ff49837e ? 0:07 sac 8 S 0 204 1 TS 43 ff2f6008 50 ff2f606e console 0:02 sh |
How to Designate a Process Priority
Start a process with a designated priority.
# priocntl -e -c class -m userlimit -p pri command-name
-e
Executes the command.
-c class
Specifies the class within which to run the process. The valid classes are TS (timesharing), RT (real time), IA (interactive), FSS (fair share), or FX (fixed priority).
-m userlimit
Specifies the maximum amount you can raise or lower your priority, when using the -p option.
-p pri command-name
Lets you specify the relative priority in the RT class, for a real-time thread. For a timesharing process, the -p option lets you specify the user-supplied priority, which ranges from -60 to +60.
Verify the process status.
# ps -ecl | grep command-name
Example--Designating a Process Priority
The following example shows how to start the find command with the highest possible user-supplied priority.
# priocntl -e -c TS -m 60 -p 60 find . -name core -print # ps -ecl | grep find |
How to Change Scheduling Parameters of a Timesharing Process
Change the scheduling parameters of a running timesharing process.
# priocntl -s -m userlimit [-p userpriority] -i idtype idlist
-s
Lets you set the upper limit on the user priority range and change the current priority.
-m userlimit
Specifies the maximum amount you can raise or lower your priority, when you use the -p option.
-p userpriority
Allows you to designate a priority.
-i idtype idlist
Uses a combination of idtype and idlist to identify the process or processes. The idtype specifies the type of ID, such as pid or UID. Use idlist to identify a list of pids or UIDs.
Verify the process status.
# ps -ecl | grep idlist
Example--Changing Scheduling Parameters of a Timesharing Process
The following example shows how to execute a command with a 500-millisecond time slice, a priority of 20 in the RT class, and a global priority of 120.
# priocntl -e -c RT -t 500 -p 20 myprog # ps -ecl | grep myprog |
How to Change the Class of a Process
Note - You must be superuser or working in a real-time shell to change a process from, or to, a real-time process.
Change the class of a process.
# priocntl -s -c class -i idtype idlist
-s
Lets you set the upper limit on the user priority range and change the current priority.
-c class
Specifies the class, TS or RT, to which you are changing the process.
-i idtype idlist
Uses a combination of idtype and idlist to identify the process or processes. The idtype specifies the type of ID, such as pid or UID. Use idlist to identify a list of pids or UIDs.
Verify the process status.
# ps -ecl | grep idlist
Example--Changing the Class of a Process
The following example shows how to change all the processes belonging to user 15249 to real-time processes.
# priocntl -s -c RT -i uid 15249 # ps -ecl | grep 15249 |
Note - If, as superuser, you change a user process to the real-time class, the user cannot subsequently change the real-time scheduling parameters by using the priocntl -s command.
Changing the Priority of a Timesharing Process With the nice Command
The nice command is only supported for backward compatibility to previous Solaris releases. The priocntl command provides more flexibility in managing processes.
The priority of a process is determined by the policies of its scheduling class, and by its nice number. Each timesharing process has a global priority. The global priority is calculated by adding the user-supplied priority (which can be influenced by the nice or priocntl commands) and the system-calculated priority.
The execution priority number of a process is assigned by the operating system, and is determined by several factors, including its scheduling class, how much CPU time it has used, and (in the case of a timesharing process) its nice number.
Each timesharing process starts with a default nice number, which it inherits from its parent process. The nice number is shown in the NI column of the ps report.
A user can lower the priority of a process by increasing its user-supplied priority. But only superuser can lower a nice number to increase the priority of a process. This restriction prevents users from increasing the priorities of their own processes, thereby monopolizing a greater share of the CPU.
The nice numbers range between 0 and +40, with 0 representing the highest priority. The default value is 20. Two versions of the command are available, the standard version, /usr/bin/nice, and a version that is part of the C shell.
How to Change the Priority of a Process
You can raise or lower the priority of a command or a process by changing the nice number. To lower the priority of a process:
/usr/bin/nice command-name | Increase the nice number by 4 units (the default). |
/usr/bin/nice +4 command-name | Increase the nice number by 4 units. |
/usr/bin/nice -10 command-name | Increase the nice number by 10 units. |
The first and second commands increase the nice number by 4 units (the default). The third command increases the nice number by 10 units. All three commands lower the priority of the process.
The following commands raise the priority of the command by lowering the nice number.
To raise the priority of a process, do one of the following:
/usr/bin/nice -10 command-name | Raises the priority of the command by lowering the nice number by 10 units. |
/usr/bin/nice --10 command-name | Raises the priority of the command by lowering the nice number by 10 units. The first minus sign is the option sign. The second minus sign indicates a negative number. |