JavaScript is required to for searching.
跳过导航链接
退出打印视图
系统管理指南:高级管理     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

关于本书

1.  管理终端和调制解调器(概述)

2.  设置终端和调制解调器(任务)

3.  使用服务访问工具管理串行端口(任务)

4.  管理系统资源(概述)

5.  显示和更改系统信息(任务)

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

7.  管理 UFS 配额(任务)

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

9.  管理系统记帐(任务)

10.  系统记帐(参考)

11.  管理系统性能(概述)

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

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

用于管理系统进程的命令

使用 ps 命令

使用 /proc 文件系统和命令

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

如何列出进程

如何显示有关进程的信息

如何控制进程

终止进程 (pkill, kill)

如何终止进程 (pkill)

如何终止进程 (kill)

调试进程 (pargs, preap)

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

管理进程类信息

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

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

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

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

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

如何更改进程的类 (priocntl)

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

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

系统进程问题的故障排除

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

14.  软件问题故障排除(概述)

15.  管理系统消息

16.  管理核心转储文件(任务)

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

18.  各种软件问题的故障排除(任务)

19.  文件访问问题故障排除(任务)

20.  解决 UFS 文件系统不一致问题(任务)

21.  软件包问题故障排除(任务)

索引

用于管理系统进程的命令

下表介绍了用于管理系统进程的命令。

表 12-1 用于管理进程的命令

命令
说明
手册页
pspgrepprstatpkill
检查系统中活动进程的状态,并显示有关这些进程的详细信息。
pkill
功能与 pgrep 相同,但通过名称或其他属性来查找进程或向进程发送信号,然后终止进程。像 kill 命令一样向每个匹配的进程发送信号,而不列显进程 ID。
pargs、preap
协助进行进程调试。
dispadmin
列出缺省进程调度策略。
priocntl
为优先级类指定进程并管理进程优先级。
nice
更改分时进程的优先级。
psrset
将特定进程组绑定到一组处理器而非一个处理器。

Solaris Management Console 的进程工具使您可通过用户友好的界面来管理进程。有关使用和启动 Solaris Management Console 的信息,请参见《系统管理指南:基本管理》中的第 2  章 "使用 Solaris Management Console(任务)"

使用 ps 命令

使用 ps 命令可以检查系统中活动进程的状态,并可显示有关进程的技术信息。此数据对于管理任务(例如,确定设置进程优先级的方式)很有用。

根据您所使用的选项,ps 命令会报告以下信息:

下表介绍了 ps 命令报告的一些字段。具体显示哪些字段取决于您选择的选项。有关所有可用选项的说明,请参见 ps(1) 手册页。

表 12-2 ps 报告中字段的汇总

字段
说明
UID
进程所有者的有效用户 ID。
PID
进程 ID。
PPID
父进程 ID。
C
用于调度的处理器使用率。使用 -c 选项时,将不显示此字段。
CLS
进程所属的调度类,例如实时、系统或分时。只有 -c 选项包括此字段。
PRI
内核线程的调度优先级。数值越大,表示优先级越高。
NI
进程的 nice 数值,该数值对其调度优先级有影响。进程的 nice 值越高,意味着其优先级越低。
ADDR
proc 结构的地址。
SZ
进程的虚拟地址大小。
WCHAN
进程休眠的事件或锁定的地址。
STIME
以小时、分钟和秒表示的进程开始时间。
TTY
从中启动进程或其父级的终端。问号表示没有控制终端。
TIME
进程自开始以来使用的 CPU 时间总量。
CMD
生成进程的命令。

使用 /proc 文件系统和命令

使用进程命令可以显示有关 /proc 目录中所列进程的详细信息。下表列出了 /proc 进程命令。/proc 目录也称为进程文件系统 (Process File System, PROCFS)。活动进程的映像按进程 ID 号存储在此位置。

表 12-3 进程命令 (/proc)

进程命令
说明
pcred
显示进程凭证信息
pfiles
为进程中打开的文件报告 fstatfcntl 信息
pflags
列显 /proc 跟踪标志、暂挂信号和保留信号以及其他状态信息
pldd
列出链接至进程中的动态库
pmap
列显每个进程的地址空间图
psig
列出每个进程的信号操作和处理程序
prun
启动每个进程
pstack
为每个进程中的每个 lwp 列显十六进制符号栈跟踪
pstop
停止每个进程
ptime
使用微状态记帐记录进程的时间
ptree
显示包含该进程的进程树
pwait
在进程终止后显示状态信息
pwdx
显示进程的当前工作目录

有关更多信息,请参见 proc(1)

进程工具与 ps 命令的某些选项相似,区别在于这些命令提供的输出更详细。

通常,进程命令可执行以下操作:

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

通过使用一些进程命令,可以显示有关进程的详细技术信息或者控制活动进程。表 12-3 列出了一些 /proc 命令。

如果某个进程陷入无限循环或者执行时间过长,则可能需要停止(中止)该进程。有关使用 killpkill 命令停止进程的更多信息,请参见第 12 章

/proc 文件系统是一个目录分层结构,其中包括状态信息和控制功能的附加子目录。

/proc 文件系统还提供了 xwatchpoint功能,用于重新映射在进程地址空间各页中的读写权限。该工具没有限制,并且是 MT-safe(多线程安全)的。

为了使用 /proc 的 xwatchpoint 功能,已修改调试工具,这意味着整个 xwatchpoint 进程会更快。

使用 dbx 调试工具设置 xwatchpoint 时,已删除以下限制:

有关更多信息,请参见 proc(4)mdb(1) 手册页。

如何列出进程

示例 12-1 列出进程

以下示例显示 ps 命令在不带任何选项时的输出。

$ ps
   PID TTY      TIME COMD
  1664 pts/4    0:06 csh
  2081 pts/4    0:00 ps

以下示例显示 ps -ef 命令的输出。此输出显示,系统启动时最先执行的进程是 sched(交换程序),然后是 init 进程、pageout 等。

$ ps -ef
     UID   PID  PPID  C    STIME TTY      TIME CMD
    root     0     0  0   Dec 20 ?        0:17 sched
    root     1     0  0   Dec 20 ?        0:00 /etc/init -
    root     2     0  0   Dec 20 ?        0:00 pageout
    root     3     0  0   Dec 20 ?        4:20 fsflush
    root   374   367  0   Dec 20 ?        0:00 /usr/lib/saf/ttymon
    root   367     1  0   Dec 20 ?        0:00 /usr/lib/saf/sac -t 300
    root   126     1  0   Dec 20 ?        0:00 /usr/sbin/rpcbind
    root    54     1  0   Dec 20 ?        0:00 /usr/lib/sysevent/syseventd
    root    59     1  0   Dec 20 ?        0:00 /usr/lib/picl/picld
    root   178     1  0   Dec 20 ?        0:03 /usr/lib/autofs/automountd
    root   129     1  0   Dec 20 ?        0:00 /usr/sbin/keyserv
    root   213     1  0   Dec 20 ?        0:00 /usr/lib/lpsched
    root   154     1  0   Dec 20 ?        0:00 /usr/sbin/inetd -s
    root   139     1  0   Dec 20 ?        0:00 /usr/lib/netsvc/yp/ypbind ...
    root   191     1  0   Dec 20 ?        0:00 /usr/sbin/syslogd
    root   208     1  0   Dec 20 ?        0:02 /usr/sbin/nscd
    root   193     1  0   Dec 20 ?        0:00 /usr/sbin/cron
    root   174     1  0   Dec 20 ?        0:00 /usr/lib/nfs/lockd
  daemon   175     1  0   Dec 20 ?        0:00 /usr/lib/nfs/statd
    root   376     1  0   Dec 20 ?        0:00 /usr/lib/ssh/sshd
    root   226     1  0   Dec 20 ?        0:00 /usr/lib/power/powerd
    root   315     1  0   Dec 20 ?        0:00 /usr/lib/nfs/mountd
    root   237     1  0   Dec 20 ?        0:00 /usr/lib/utmpd
    .
    .
    .    

如何显示有关进程的信息

  1. 获得要显示更多信息的进程的进程 ID。
    # pgrep process

    其中,process 是要显示更多信息的进程的名称。

    进程 ID 显示在输出的第一列中。

  2. 显示所需进程信息。
    # /usr/bin/pcommand pid
    pcommand

    是要运行的 (/proc) 命令。表 12-3 列出并介绍了这些命令。

    pid

    标识进程 ID。

示例 12-2 显示有关进程的信息

以下示例显示如何使用进程命令来显示有关 cron 进程的更多信息。

# pgrep cron 1
4780
# pwdx 4780 2
4780:   /var/spool/cron/atjobs
# ptree 4780 3
4780  /usr/sbin/cron
# pfiles 4780 4
4780:   /usr/sbin/cron
  Current rlimit: 256 file descriptors
   0: S_IFCHR mode:0666 dev:290,0 ino:6815752 uid:0 gid:3 rdev:13,2
      O_RDONLY|O_LARGEFILE
      /devices/pseudo/mm@0:null
   1: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /var/cron/log
   2: S_IFREG mode:0600 dev:32,128 ino:42054 uid:0 gid:0 size:9771
      O_WRONLY|O_APPEND|O_CREAT|O_LARGEFILE
      /var/cron/log
   3: S_IFIFO mode:0600 dev:32,128 ino:42049 uid:0 gid:0 size:0
      O_RDWR|O_LARGEFILE
      /etc/cron.d/FIFO
   4: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
      O_RDWR|O_NONBLOCK
   5: S_IFIFO mode:0000 dev:293,0 ino:4630 uid:0 gid:0 size:0
      O_RDWR
  1. 获得 cron 进程的进程 ID

  2. 显示 cron 进程的当前工作目录

  3. 显示包含 cron 进程的进程树

  4. 显示 fstatfcntl 信息

如何控制进程

  1. 获得要控制的进程的进程 ID。
    # pgrep process

    其中,process 是要控制的进程的名称。

    进程 ID 显示在输出的第一列中。

  2. 使用相应的进程命令来控制进程。
    # /usr/bin/pcommand pid
    pcommand

    是要运行的进程 (/proc) 命令。表 12-3 列出并介绍了这些命令。

    pid

    标识进程 ID。

  3. 验证进程状态。
    # ps -ef | grep pid

示例 12-3 控制进程

以下示例显示如何使用进程命令来停止和重新启动 dtpad 进程。

# pgrep dtpad 1
2921
# pstop 29212 
# prun 2921 3
  1. 获得 dtpad 进程的进程 ID

  2. 停止 dtpad 进程

  3. 重新启动 dtpad 进程

终止进程 (pkill, kill)

有时,您可能需要停止(中止)进程。该进程可能处于无限循环中。或者,您可能启动了一个大型作业,并且希望在完成之前使其停止。您可以中止属于您的任何进程。超级用户可以中止系统中的任何进程,但进程 ID 为 01234 的进程除外。中止这些进程很可能会使系统崩溃。

有关更多信息,请参见 pgrep(1)pkill(1)kill(1) 手册页。

如何终止进程 (pkill)

  1. 可选要终止另一个用户的进程,请成为超级用户或承担等效角色。
  2. 获得要终止的进程的进程 ID。
    $ pgrep process

    其中,process 是要终止的进程的名称。

    例如:

    $ pgrep netscape
    587
    566

    在输出中显示进程 ID。


    注 - 要获得有关 Sun Ray 的进程信息,请使用以下命令:

    # ps -fu user

    此命令将列出所有用户进程。

    # ps -fu user | grep process

    此命令可为用户找到特定进程。


  3. 终止进程。
    $ pkill [signal] process
    signal

    pkill 命令行语法中不包含任何信号时,使用的缺省信号为 –15 (SIGKILL)。将 –9 信号 (SIGTERM) 与 pkill 命令一起使用,可以确保进程快速终止。但是,不应使用 –9 信号来中止特定进程,例如数据库进程或 LDAP 服务器进程。结果是可能丢失数据。

    process

    是要停止的进程的名称。


    提示 - 使用 pkill 命令终止进程时,先尝试使用该命令本身,而不包括信号选项。等待几分钟确定进程是否终止,然后再使用带有 -9 信号的 pkill 命令。


  4. 验证进程是否已终止。
    $ pgrep process

    pgrep 命令的输出中应不再列出已终止的进程。

如何终止进程 (kill)

  1. 可选要终止另一个用户的进程,请成为超级用户或承担等效角色。
  2. 获得要终止的进程的进程 ID。
    $ ps -fu user

    其中,user 是要为其显示进程的用户。

    进程 ID 显示在输出的第一列中。

  3. 终止进程。
    $ kill [signal-number] pid
    signal

    kill 命令行语法中不包括任何信号时,使用的缺省信号为 –15 (SIGKILL)。将 –9 信号 (SIGTERM) 与 kill 命令一起使用,可以确保进程快速终止。但是,不应使用 –9 信号来中止特定进程,例如数据库进程或 LDAP 服务器进程。结果是可能丢失数据。

    pid

    是要终止的进程的进程 ID。


    提示 - 使用 kill 命令停止进程时,先尝试使用该命令本身,而不包括信号选项。等待几分钟以确定进程是否终止,然后再使用带有 -9 信号的 kill 命令。


  4. 验证进程是否已终止。
    $ pgrep pid

    pgrep 命令的输出中应不再列出已终止的进程。

调试进程 (pargs, preap)

pargs 命令和 preap 命令可以改进进程调试。pargs 命令可以列显与实时进程或核心转储文件关联的参数和环境变量。preap 命令可以删除不再存在(僵停)的进程。僵停进程尚不具有由父进程请求的退出状态。这些进程通常是无害的,但如果数量众多,则会占用系统资源。可以使用 pargspreap 命令检查您有权检查的任何进程。作为超级用户,您可以检查任何进程。

有关使用 preap 命令的信息,请参见 preap(1) 手册页。有关使用 pargs 命令的信息,请参见 pargs(1) 手册页。另请参见 proc(1) 手册页。

示例 12-4 调试进程 (pargs)

pargs 命令可以解决一个长期存在的问题,即使用 ps 命令无法显示传递给进程的所有参数。以下示例显示如何通过结合使用 pargs 命令和 pgrep 命令来显示传递给进程的参数。

# pargs `pgrep ttymon`
579:    /usr/lib/saf/ttymon -g -h -p system-name console login:  
-T sun -d /dev/console -l 
argv[0]: /usr/lib/saf/ttymon
argv[1]: -g
argv[2]: -h
argv[3]: -p
argv[4]: system-name console login: 
argv[5]: -T
argv[6]: sun
argv[7]: -d
argv[8]: /dev/console
argv[9]: -l
argv[10]: console
argv[11]: -m
argv[12]: ldterm,ttcompat
548:    /usr/lib/saf/ttymon
argv[0]: /usr/lib/saf/ttymon

以下示例显示如何使用 pargs -e 命令来显示与某一进程关联的环境变量。

$ pargs -e 6763
6763: tcsh
envp[0]: DISPLAY=:0.0