以下列表列出了可在系统中配置的进程调度类。其中还包括分时类的用户优先级范围。
可能的进程调度类如下所示:
进程的调度优先级是进程调度程序根据调度策略分配的优先级。dispadmin 命令可以列出缺省调度策略。有关更多信息,请参见 dispadmin(1M) 手册页。
可以使用 priocntl 命令将进程指定给优先级类并管理进程优先级。有关使用 priocntl 命令管理进程的说明,请参见如何指定进程优先级 (priocntl)。
# priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range: -60 through 60 FX (Fixed priority) Configured FX User Priority Range: 0 through 60 IA (Interactive) Configured IA User Priority Range: -60 through 60 |
以下示例显示 ps -ecl 命令的输出。PRI 列中的值显示,pageout 进程优先级最高,而 sh 进程的优先级最低。
$ 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 |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
以指定的优先级启动进程。
# priocntl -e -c class -m user-limit -p pri command-name |
执行该命令。
指定要在其中运行进程的类。有效类包括 TS(分时)、RT(实时)、IA(交互)、FSS(公平份额)和 FX(固定优先级)。
使用 -p 选项时,可以指定可将优先级提高或降低的最大量。
允许您为实时线程指定在 RT 类中的相对优先级。对于分时进程而言,使用 -p 选项可以指定用户提供的优先级,该优先级范围是 -60 到 +60。
验证进程状态。
# ps -ecl | grep command-name |
以下示例显示如何以用户提供的最高优先级启动 find 命令。
# priocntl -e -c TS -m 60 -p 60 find . -name core -print # ps -ecl | grep find |
成为超级用户或同等角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。
# priocntl -s -m user-limit [-p user-priority] -i idtype idlist |
允许设置用户优先级范围的上限并更改当前优先级。
使用 -p 选项时,可以指定可将优先级提高或降低的最大量。
允许指定优先级。
结合使用 xidtype 和 xidlist 以标识一个或多个进程。xidtype 指定 ID 的类型,例如进程 ID 或用户 ID。使用 xidlist 可以标识进程 ID 或用户 ID 的列表。
验证进程状态。
# ps -ecl | grep idlist |
以下示例显示如何以 500 毫秒的时间片、RT 类中的优先级 20 以及全局优先级 120 来执行命令。
# priocntl -e -c RT -m 500 -p 20 myprog # ps -ecl | grep myprog |
更改进程的类。
# priocntl -s -c class -i idtype idlist |
允许设置用户优先级范围的上限并更改当前优先级。
为分时或实时指定要更改进程的类 TS 或 RT。
结合使用 xidtype 和 xidlist 以标识一个或多个进程。xidtype 指定 ID 的类型,例如进程 ID 或用户 ID。使用 xidlist 可以标识进程 ID 或用户 ID 的列表。
只有超级用户或在实时 Shell 中工作的用户才能将某一进程更改为实时进程或将实时进程更改为该进程。如果超级用户将用户进程更改为实时类,那么该用户以后不能使用 priocntl -s 命令来更改实时调度参数。
验证进程状态。
# ps -ecl | grep idlist |
以下示例显示如何将属于用户 15249 的所有进程都更改为实时进程。
# priocntl -s -c RT -i uid 15249 # ps -ecl | grep 15249 |
支持 nice 命令的目的只是为了向下兼容以前的 Solaris 发行版。priocntl 命令在管理进程方面提供了更多的灵活性。
进程的优先级由其调度类的策略和 nice 数值决定。每个分时进程都有全局优先级。全局优先级的计算方法是用户提供的优先级(该优先级可能受 nice 或 priocntl 命令影响)加上系统计算的优先级。
进程的执行优先级数由操作系统分配。优先级数由多个因素决定,其中包括进程的调度类、进程使用的 CPU 时间以及进程的 nice 数值(对于分时进程的情况)。
每个分时进程都以缺省 nice 数值启动,它从父进程中继承该数值。nice 数值显示在 ps 报告的 NI 列中。
用户可通过提高用户提供的优先级来降低进程的优先级。但是,只有超级用户能够通过降低 nice 数值来提高进程的优先级。此限制使用户无法提高自己所拥有进程的优先级,因此会独占更大的 CPU 份额。
nice 数值的范围是从 0 到 +39,其中 0 表示最高优先级。每个分时进程的缺省 nice 值为 20。有两个可用的命令版本:标准版本 /usr/bin/nice 以及 C shell 内置命令。
通过使用此过程,用户可以降低进程的优先级。而超级用户可以提高或降低进程的优先级。
本节介绍的是 /usr/bin/nice 命令而非 C-shell 内置 nice 命令的语法。有关 C-shell nice 命令的信息,请参见 csh(1) 手册页。
确定要以用户身份还是超级用户身份更改进程的优先级。然后,选择以下两项之一:
以用户身份,通过增大 nice 数值降低命令的优先级。
以下 nice 命令使 nice 数值增大 5 个单位,从而以更低的优先级执行 command-name。
$ /usr/bin/nice -5 command-name |
在前面的命令中,减号指定后面的内容是一个选项。也可以通过以下方式来指定此命令:
% /usr/bin/nice -n 5 command-name |
以下 nice 命令使 nice 数值增大 10 个单位(缺省增量)但未超出最大值 39,从而降低了 command-name 的优先级。
% /usr/bin/nice command-name |
作为超级用户或同等角色,通过更改 nice 数值来提高或降低命令的优先级。
以下 nice 命令使 nice 数值降低 10 个单位但不低于最小值 0,从而提高了 command-name 的优先级。
# /usr/bin/nice --10 command-name |
在前面的命令中,第一个减号指定后面的内容是一个选项。第二个减号指示一个负数。
以下 nice 命令使 nice 数值增大 5 个单位但未超出最大值 39,从而降低了 command-name 的优先级。
# /usr/bin/nice -5 command-name |
有关更多信息,请参见 nice(1) 手册页。