下图说明了缺省的进程优先级。
图 4-1 进程优先级(从程序员的角度考虑)
进程优先级仅在调度程序类的上下文中才有意义。可以通过指定类和特定于类的优先级值来指定进程优先级。系统会将类和特定于类的值映射成其用来调度进程的全局优先级。
从系统管理员的角度考虑的优先级与从用户或程序员的角度考虑的优先级不同。配置调度程序类时,管理员直接处理全局优先级。系统会将用户提供的优先级映射成这些全局优先级。有关优先级的更多信息,请参见《Oracle Solaris 管理:基本管理》。
带有 -cel 选项的 ps(1) 命令可用于报告所有活动进程的全局优先级。priocntl(1) 命令可用于报告用户和程序员使用的特定于类的优先级。
priocntl(1) 命令以及 priocntl(2) 和 priocntlset(2) 接口用于设置或检索进程的调度程序参数。使用上述命令和两个接口设置优先级的顺序基本相同:
指定目标进程。
指定要用于这些进程的调度程序参数。
执行命令或接口,为进程设置参数。
进程 ID 是 UNIX 进程的基本属性。有关更多信息,请参见 Intro(2)。类 ID 是指进程的调度程序类。priocntl(2) 仅适用于分时和实时类,不适用于系统类。
priocntl(1) 实用程序可在调度进程时执行四个不同的控制接口:
显示配置信息
显示进程的调度参数
设置进程的调度参数
执行带有指定调度参数的命令
以下示例说明了 priocntl(1) 的用法。
用于缺省配置的 -l 选项会生成以下输出:
$ priocntl -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) Configured TS User Priority Range -60 through 60 RT (Real Time) Maximum Configured RT Priority: 59
要显示有关所有进程的信息,请执行以下命令:
$ priocntl -d -i all
要显示有关所有分时进程的信息,请执行以下命令:
$ priocntl -d -i class TS
要显示有关用户 ID 为 103 或 6626 的所有进程的信息,请执行以下命令:
$ priocntl -d -i uid 103 6626
要使 ID 为 24668 的进程成为具有缺省参数的实时进程,请执行以下命令:
$ priocntl -s -c RT -i pid 24668
要生成优先级为 55 的 3608 RT 和五分之一秒的时间片,请执行以下命令:
$ priocntl -s -c RT -p 55 -t 1 -r 5 -i pid 3608
要将所有进程更改为分时进程,请执行以下命令:
$ priocntl -s -c TS -i all
要将 UID 1122 的 TS 用户优先级和用户优先级限制减小到 -10,请执行以下命令:
$ priocntl -s -c TS -p -10 -m -10 -i uid 1122
要启动具有缺省实时优先级的实时 shell,请执行以下命令:
$ priocntl -e -c RT /bin/sh
要使用分时用户优先级 -10 运行 make,请执行以下命令:
$ priocntl -e -c TS -p -10 make bigprog
priocntl(1) 包括 nice(1) 的接口。nice 仅适用于分时进程,并使用较高的数值来指定较低的优先级。上一个示例相当于使用 nice(1) 将增量设置为 10:
$ nice -10 make bigprog
priocntl(2) 用于管理一个或一组进程的调度参数。可以针对 LWP、单个进程或一组进程调用 priocntl(2)。一组进程可以通过父进程、进程组、会话、用户、组、类或所有活动进程进行标识。有关更多详细信息,请参见 priocntl 手册页。
如果给定类 ID,则 PC_GETCLINFO 命令可以获取调度程序类名称和参数。使用此命令,在编写程序时就不用假设需要对哪些类进行配置。
PC_SETXPARMS 命令用于设置一组进程的调度程序类和参数。idtype 和 id 输入参数用于指定要更改的进程。