JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 管理:常见任务     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

关于本书

1.  查找有关 Oracle Solaris 命令的信息

2.  管理用户帐户和组(概述)

3.  管理用户帐户和组(任务)

4.  引导和关闭 Oracle Solaris 系统

5.  使用 Oracle Configuration Manager

6.  管理服务(概述)

7.  管理服务(任务)

8.  使用 Fault Manager

9.  管理系统信息(任务)

10.  管理系统进程(任务)

管理系统进程(任务列表)

用于管理系统进程的命令

使用 ps 命令

使用 /proc 文件系统和命令

使用进程命令管理进程 (/proc)

如何列出进程

如何显示有关进程的信息

如何控制进程

终止进程 (pkill, kill)

如何终止进程 (pkill)

如何终止进程 (kill)

调试进程 (pargs, preap)

管理进程类信息(任务列表)

管理进程类信息

更改进程的调度优先级 (priocntl)

如何显示有关进程类的基本信息 (priocntl)

如何显示进程的全局优先级

如何指定进程优先级 (priocntl)

如何更改分时进程的调度参数 (priocntl)

如何更改进程的类 (priocntl)

更改分时进程的优先级 (nice)

如何更改进程的优先级 (nice)

系统进程问题的故障排除

11.  监视系统性能(任务)

12.  管理软件包(任务)

13.  管理磁盘使用(任务)

14.  调度系统任务(任务)

15.  使用 CUPS 设置和管理打印机(任务)

16.  管理系统控制台、终端设备和电源服务(任务)

17.  管理系统故障转储信息(任务)

18.  管理核心文件(任务)

19.  系统和软件问题的故障排除(任务)

20.  其他系统和软件问题的故障排除(任务)

索引

管理进程类信息

以下列表列出了可在系统中配置的进程调度类。其中还包括分时类的用户优先级范围。

可能的进程调度类如下所示:

更改进程的调度优先级 (priocntl)

进程的调度优先级是进程调度程序根据调度策略指定的优先级。dispadmin 命令可以列出缺省调度策略。有关更多信息,请参见 dispadmin(1M) 手册页。

可以使用 priocntl 命令将进程指定给优先级类并管理进程优先级。有关使用 priocntl 命令管理进程的说明,请参见如何指定进程优先级 (priocntl)

如何显示有关进程类的基本信息 (priocntl)

示例 10-4 显示有关进程类的基本信息 (priocntl)

以下示例显示 priocntl -l 命令的输出。

# 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

如何显示进程的全局优先级

示例 10-5 显示进程的全局优先级

以下示例显示 ps -ecl 命令的输出。PRI 列中的值显示,pageout 进程的优先级最高,而 sh 进程的优先级最低。

$ ps -ecl
 F S    UID   PID  PPID  CLS PRI     ADDR     SZ    WCHAN TTY         TIME CMD
 1 T      0     0     0  SYS  96        ?      0          ?         0:11 sched
 1 S      0     5     0  SDC  99        ?      0        ? ?         0:01 zpool-rp
 0 S      0     1     0   TS  59        ?    688        ? ?         0:00 init
 1 S      0     2     0  SYS  98        ?      0        ? ?         0:00 pageout
 1 S      0     3     0  SYS  60        ?      0        ? ?         2:31 fsflush
 1 S      0     6     0  SDC  99        ?      0        ? ?         0:00 vmtasks
 0 S     16    56     1   TS  59        ?   1026        ? ?         0:01 ipmgmtd
 0 S      0     9     1   TS  59        ?   3480        ? ?         0:04 svc.star
 0 S      0    11     1   TS  59        ?   3480        ? ?         0:13 svc.conf
 0 S      0   162     1   TS  59        ?    533        ? ?         0:00 pfexecd
 0 S      0  1738  1730   TS  59        ?    817        ? pts/ 1       0:00 bash
 0 S      1   852     1   TS  59        ?    851        ? ?         0:17 rpcbind
 0 S     17    43     1   TS  59        ?   1096        ? ?         0:01 netcfgd
 0 S     15    47     1   TS  59        ?    765        ? ?         0:00 dlmgmtd
 0 S      0    68     1   TS  59        ?    694        ? ?         0:01 in.mpath
 0 S      1  1220     1   FX  60        ?    682        ? ?         0:00 nfs4cbd
 0 S     16    89     1   TS  59        ?   1673        ? ?         0:02 nwamd
 0 S      0   146     1   TS  59        ?    629        ? ?         0:01 dhcpagen
 0 S      1   129     1   TS  59        ?   1843        ? ?         0:00 kcfd
 0 S      1  1215     1   FX  60        ?    738        ? ?         0:00 lockd
 0 S      0   829   828   TS  59        ?    968        ? ?         0:00 hald-run
 0 S      0   361     1   TS  59        ?   1081        ? ?         0:01 devfsadm
 0 S      0   879     1   TS  59        ?   1166        ? ?         0:01 inetd
 0 O 119764  1773   880   TS  59        ?    557          cons ole     0:00 ps
 0 S      0   844   829   TS  59        ?    996        ? ?         0:00 hald-add
 0 S      0   895   866   TS  59        ?    590        ? ?         0:00 ttymon
 0 S      0   840     1   TS  59        ?    495        ? ?         0:00 cron
 0 S      0   874     1   TS  59        ?    425        ? ?         0:00 utmpd
 0 S      0  1724   956   TS  59        ?   2215        ? ?         0:00 sshd
 0 S 119764   880     9   TS  59        ?    565        ? cons ole     0:00 csh
 0 S      0   210     1   TS  59        ?   1622        ? ?         0:00 sysevent
 0 S      0   279     1   TS  59        ?    472        ? ?         0:00 iscsid
 0 S      1  1221     1   TS  59        ?   1349        ? ?         0:00 nfsmapid
 1 S      0   374     0  SDC  99        ?      0        ? ?         0:00 zpool-us
 0 S      0  1207     1   TS  59        ?   1063        ? ?         0:00 rmvolmgr
 0 S      0   828     1   TS  59        ?   1776        ? ?         0:03 hald
 0 S      0   853   829   TS  59        ?    896        ? ?         0:02 hald-add
 0 S      0   373     1   TS  59        ?    985        ? ?         0:00 picld
 0 S      0   299     1   TS  59        ?    836        ? ?         0:00 dbus-dae
 0 S  12524  1730  1725   TS  59        ?    452        ? pts/ 1       0:00 csh
 0 S      0   370     1   TS  59        ?    574        ? ?         0:00 powerd
 0 S      0   264     1   FX  60        ?    637        ? ?         0:00 zonestat
 0 S      0   866     9   TS  59        ?    555        ? ?         0:00 sac
 0 S      0   851   829   TS  59        ?    998        ? ?         0:00 hald-add
 0 S  12524  1725  1724   TS  59        ?   2732        ? ?         0:00 sshd
 0 S      1  1211     1   TS  59        ?    783        ? ?         0:00 statd
 0 S      0  1046     1   TS  59        ?   1770        ? ?         0:13 intrd
 0 S      0   889     1   TS  59        ?   1063        ? ?         0:00 syslogd
 0 S      0  1209     1   TS  59        ?    792        ? ?         0:00 in.ndpd
 0 S      0  1188  1186   TS  59        ?    951        ? ?         0:15 automoun
 0 S      0  1172   829   TS  59        ?    725        ? ?         0:00 hald-add
 0 S      0  1186     1   TS  59        ?    692        ? ?         0:00 automoun
 0 S    101  1739  1738   TS  59        ?    817        ? pts/ 1       0:00 bash
 0 S      0  1199     1   TS  59        ?   1495        ? ?         0:02 sendmail
 0 S      0   956     1   TS  59        ?   1729        ? ?         0:00 sshd
 0 S     25  1192     1   TS  59        ?   1528        ? ?         0:00 sendmail
 0 S      0   934     1   TS  59        ?   6897        ? ?         0:14 fmd
 0 S      0  1131     1   TS  59        ?   1691        ? ?         0:07 nscd
 0 S      1  1181     1   TS  59        ?    699        ? ?         0:00 ypbind
 

如何指定进程优先级 (priocntl)

  1. 成为 root 角色。
  2. 以指定的优先级启动进程。
    # priocntl -e -c class -m user-limit -p pri command-name
    -e

    执行该命令。

    -c class

    指定要在其中运行进程的类。有效类包括 TS(timesharing,分时)、RT(real time,实时)、IA(interactive,交互)、FSS(fair share,公平份额)和 FX(fixed priority,固定优先级)。

    -m user-limit

    将此选项与 -p 选项一起使用时,还可指定可将优先级提高或降低的最大量。

    -p pri command-name

    允许您为实时线程指定在 RT 类中的相对优先级。对于分时进程而言,使用 -p 选项可以指定用户提供的优先级,该优先级范围是 -60 到 +60。

  3. 验证进程状态。
    # ps -ecl | grep command-name

示例 10-6 指定进程优先级 (priocntl)

以下示例显示如何以用户提供的最高优先级启动 find 命令。

# priocntl -e -c TS -m 60 -p 60 find . -name core -print
# ps -ecl | grep find

如何更改分时进程的调度参数 (priocntl)

  1. 成为 root 角色。
  2. 更改正在运行的分时进程的调度参数。
    # priocntl -s -m user-limit [-p user-priority] -i idtype idlist
    -s

    允许设置用户优先级范围的上限并更改当前优先级。

    -m user-limit

    使用 -p 选项时,可以指定可将优先级提高或降低的最大量。

    -p user-priority

    允许指定优先级。

    -i xidtype xidlist

    结合使用 xidtypexidlist 可以标识一个或多个进程。xidtype 指定 ID 的类型,例如进程 ID 或用户 ID。使用 xidlist 可以标识进程 ID 或用户 ID 的列表。

  3. 验证进程状态。
    # ps -ecl | grep idlist

示例 10-7 更改分时进程的调度参数 (priocntl)

以下示例显示如何以 500 毫秒的时间分片、RT 类中的优先级 20 以及全局优先级 120 来执行命令。

# priocntl -e -c RT -m 500 -p 20 myprog
# ps -ecl | grep myprog

如何更改进程的类 (priocntl)

  1. 可选成为 root 角色。
  2. 更改进程的类。
    # priocntl -s -c class -i idtype idlist
    -s

    允许设置用户优先级范围的上限并更改当前优先级。

    -c class

    指定进程所要改用的类,分时则指定 TS,实时则指定 RT

    -i idtype idlist

    结合使用 xidtypexidlist 可以标识一个或多个进程。xidtype 指定 ID 的类型,例如进程 ID 或用户 ID。使用 xidlist 可以标识进程 ID 或用户 ID 的列表。


    注 - 只有 root 用户或在实时 Shell 中工作的用户才能将某一进程改为实时进程或将其从实时进程改为非实时进程。如果超级用户将用户进程改为实时类,那么该用户以后不能使用 priocntl -s 命令来更改实时调度参数。


  3. 验证进程状态。
    # ps -ecl | grep idlist

示例 10-8 更改进程的类 (priocntl)

以下示例显示如何将属于用户 15249 的所有进程都更改为实时进程。

# priocntl -s -c RT -i uid 15249
# ps -ecl | grep 15249

更改分时进程的优先级 (nice)

支持 nice 命令只是为了向下兼容以前的发行版。priocntl 命令在管理进程方面提供了更大的灵活性。

进程的优先级由其调度类的策略和 nice 数值决定。每个分时进程都有全局优先级。全局优先级的计算方法是用户提供的优先级(该优先级可能受 nice priocntl 命令影响)加上系统计算的优先级。

进程的执行优先级数由操作系统指定。优先级数由多个因素决定,其中包括进程的调度类、进程使用的 CPU 时间以及进程的 nice 数值(对于分时进程的情况)。

每个分时进程都以缺省 nice 数值启动,它从父进程中继承该数值。nice 数值显示在 ps 报告的 NI 列中。

用户可通过提高用户提供的优先级来降低进程的优先级。但是,只有超级用户能够通过降低 nice 数值来提高进程的优先级。此限制使用户无法提高自己所拥有进程的优先级,因此会独占更大的 CPU 份额。

nice 数值的范围是从 0 到 +39,其中 0 表示最高优先级。每个分时进程的缺省 nice 值为 20。有两个可用的命令版本:标准版本 /usr/bin/nice 以及 C shell 内置命令。

如何更改进程的优先级 (nice)

通过使用此过程,用户可以降低进程的优先级。但是,root 用户可以提高或降低某个进程的优先级。

  1. 确定要以用户身份还是超级用户身份更改进程的优先级。然后,选择以下两项之一:
    • 以用户身份,按照步骤 2 中的示例降低命令的优先级。
    • 以超级用户的身份,按照步骤 3 中的示例提高或降低命令的优先级。
  2. 以用户身份,通过增大 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
  3. 作为超级用户,通过更改 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) 手册页。