JavaScript is required to for searching.
跳过导航链接
退出打印视图
在 Oracle Solaris 11.1 中管理系统信息、进程和性能     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

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

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

系统进程管理方面的新增功能

伪系统进程

管理系统进程

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

用于管理系统进程的命令

使用 ps 命令

使用 /proc 文件系统和命令

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

如何列出进程

如何显示有关进程的信息

如何控制进程

终止进程 (pkill, kill)

如何终止进程 (pkill)

如何终止进程 (kill)

调试进程(pargs preap

管理进程类信息

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

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

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

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

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

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

如何更改进程的类 (priocntl)

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

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

系统进程问题的故障排除

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

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

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

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

管理系统进程

本节介绍了管理系统进程的各种任务。

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

任务
说明
参考
列出进程。
使用 ps 命令列出系统中的所有进程。
显示有关进程的信息。
使用 pgrep 命令获取要显示其详细信息的进程的进程 ID。
控制进程。
使用 pgrep 命令找到进程。然后,使用相应的 pcommand (/proc) 来控制进程。有关 (表 2-3) 命令的说明,请参见Table 2–3
中止进程。

通过进程名称或进程 ID 找到进程。然后可以使用 pkillkill 命令终止进程。

用于管理系统进程的命令

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

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

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

使用 ps 命令

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

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

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

表 2-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 号存储在此位置。

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

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

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

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

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

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

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

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

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

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

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

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

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

如何列出进程

示例 2-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 18:04:04 ?           0:15 sched
    root     5     0   0 18:04:03 ?           0:05 zpool-rpool
    root     1     0   0 18:04:05 ?           0:00 /sbin/init
    root     2     0   0 18:04:05 ?           0:00 pageout
    root     3     0   0 18:04:05 ?           2:52 fsflush
    root     6     0   0 18:04:05 ?           0:02 vmtasks
  daemon   739     1   0 19:03:58 ?           0:00 /usr/lib/nfs/nfs4cbd
    root     9     1   0 18:04:06 ?           0:14 /lib/svc/bin/svc.startd
    root    11     1   0 18:04:06 ?           0:45 /lib/svc/bin/svc.configd
  daemon   559     1   0 18:04:49 ?           0:00 /usr/sbin/rpcbind
  netcfg    47     1   0 18:04:19 ?           0:01 /lib/inet/netcfgd
   dladm    44     1   0 18:04:17 ?           0:00 /sbin/dlmgmtd
  netadm    51     1   0 18:04:22 ?           0:01 /lib/inet/ipmgmtd
    root   372   338   0 18:04:43 ?           0:00 /usr/lib/hal/hald-addon-cpufreq
    root    67     1   0 18:04:30 ?           0:02 /lib/inet/in.mpathd
    root   141     1   0 18:04:38 ?           0:00 /usr/lib/pfexecd
  netadm    89     1   0 18:04:31 ?           0:03 /lib/inet/nwamd
    root   602     1   0 18:04:50 ?           0:02 /usr/lib/inet/inetd start
    root   131     1   0 18:04:35 ?           0:01 /sbin/dhcpagent
  daemon   119     1   0 18:04:33 ?           0:00 /lib/crypto/kcfd
    root   333     1   0 18:04:41 ?           0:07 /usr/lib/hal/hald --daemon=yes
    root   370   338   0 18:04:43 ?           0:00 /usr/lib/hal/hald-addon-network-discovery
    root   159     1   0 18:04:39 ?           0:00 /usr/lib/sysevent/syseventd
    root   236     1   0 18:04:40 ?           0:00 /usr/lib/ldoms/drd
    root   535     1   0 18:04:46 ?           0:09 /usr/sbin/nscd
    root   305     1   0 18:04:40 ?           0:00 /usr/lib/zones/zonestatd
    root   326     1   0 18:04:41 ?           0:03 /usr/lib/devfsadm/devfsadmd
    root   314     1   0 18:04:40 ?           0:00 /usr/lib/dbus-daemon --system
    .
        .
        .

如何显示有关进程的信息

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

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

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

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

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

    pid

    标识进程 ID。

示例 2-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) 命令。表 2-3 列出并介绍了这些命令。

    pid

    标识进程 ID。

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

终止进程 (pkill, kill)

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

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

如何终止进程 (pkill)

  1. 要终止其他用户的进程,请承担 root 角色。
  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. 要终止其他用户的进程,请承担 root 角色。
  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) 手册页。

示例 2-3 调试进程 (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