|
使用 ps 命令可以检查系统中活动进程的状态,并可显示有关进程的技术信息。此数据对于管理任务(例如,确定设置进程优先级的方式)很有用。
以下列表介绍了 ps 命令报告的一些字段。具体显示哪些字段取决于您选择的选项。有关所有可用选项的说明,请参见 ps(1) 手册页。
进程 ID。
父进程 ID。
用于调度的处理器使用率。使用 –c 选项时,将不显示此字段。
进程所属的调度类,例如实时、系统或分时。只有 –c 选项包括此字段。
内核线程的调度优先级。数值越大,表示优先级越高。
进程的 nice 数值,该数值对其调度优先级有影响。进程的 nice 值越高,意味着其优先级越低。
proc 结构的地址。
进程的虚拟地址大小。
进程休眠的事件或锁定的地址。
以小时、分钟和秒表示的进程开始时间。
从中启动进程或其父级的终端。问号表示没有控制终端。
进程自开始以来使用的 CPU 时间总量。
生成进程的命令。
使用进程命令可以显示有关 /proc 目录中所列进程的详细信息。下表列出了 /proc 进程命令。/proc 目录也称为进程文件系统 (Process File System, PROCFS)。活动进程的映像按进程 ID 号存储在 PROCFS 中。
|
有关更多信息,请参见 proc(1) 手册页。
进程工具与 ps 命令的某些选项相似,区别在于这些命令提供的输出更详细。
通过使用一些进程命令,可以显示有关进程的详细技术信息或者控制活动进程。Table 2–2 列出了部分 /proc 命令。
如果某个进程陷入无限循环或者执行时间过长,则可能需要停止(中止)该进程。有关使用 kill 或 pkill 命令停止进程的更多信息,请参见Chapter 2, 管理系统进程。
/proc 文件系统是一个目录分层结构,其中包括状态信息和控制功能的附加子目录。
/proc 文件系统还提供了 xwatchpoint 功能,用于在进程地址空间中的各页上重新映射读写权限。该工具没有限制,并且是 MT-safe(多线程安全)的。
为了能使用 xwatchpoint 功能,调试工具已进行了修改,这意味着整个 xwatchpoint 进程会更快。
使用 dbx 调试工具设置 xwatchpoints 时,以下限制不再适用:
由于基于 SPARC 的系统注册窗口而在栈的本地变量中设置 xwatchpoints。
在多线程进程中设置 xwatchpoints。
有关更多信息,请参见 proc(4) 和 mdb(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 . . .
# pgrep process
进程 ID 显示在输出的第一列中。
# /usr/bin/pcommand PID
您希望运行的进程命令。Table 2–2 列出并介绍了这些命令。
标识进程 ID。
以下示例显示如何使用进程命令来显示有关 cron 进程的更多信息。
# pgrep cron Obtains the process ID for the cron process 4780 # pwdx 4780 Displays the current working directory for the cron process 4780: /var/spool/cron/atjobs # ptree 4780 Displays the process tree that contains the cron process 4780 /usr/sbin/cron # pfiles 4780 Displays fstat and fcntl information 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
# pgrep process
进程 ID 显示在输出的第一列中。
# /usr/bin/pcommand PID
您希望运行的进程命令。Table 2–2 列出并介绍了这些命令。
标识进程 ID。
# ps -ef | grep PID
有时,您可能需要停止(中止)无限循环进程,或在完成前停止大型作业。您可以中止属于您的任何进程。系统管理员可以中止系统中的任何进程,但进程 ID 为 0、1、2、3 和 4 的进程除外。中止这些进程很可能会使系统崩溃。
有关更多信息,请参见 pgrep(1)、pkill(1) 以及 kill(1) 手册页。
$ pgrep process
例如:
$ pgrep netscape 587 566
在输出中显示进程 ID。
列出所有用户进程:
# ps -fu user
定位某位用户拥有的特定进程:
# ps -fu user | grep process
$ pkill [signal] PID
当 pkill 命令行语法中不包含任何信号时,使用的缺省信号为 –15 (SIGKILL)。将 –9 信号 (SIGTERM) 与 pkill 命令一起使用,可以确保进程快速终止。但是,不应使用 –9 信号来中止特定进程,例如数据库进程或 LDAP 服务器进程,因为数据可能已丢失。
要停止的进程的名称。
$ pgrep process
pgrep 命令的输出中应不再列出已终止的进程。
# ps -fu user
其中 user 是进程的所有者。
进程 ID 显示在输出的第一列中。
# kill [signal-number] PID
当 kill 命令行语法中不包括任何信号时,使用的缺省信号为 –15 (SIGKILL)。将 –9 信号 (SIGTERM) 与 kill 命令一起使用,可以确保进程快速终止。但是,不应使用 –9 信号来中止特定进程,例如数据库进程或 LDAP 服务器进程,因为数据可能已丢失。
是要终止的进程的进程 ID。
$ ps
ps 命令的输出中应不再列出已终止的进程。
pargs 命令和 preap 命令可以改进进程调试。pargs 命令可以列显与实时进程或核心文件关联的参数和环境变量。preap 命令可以删除不再存在(僵停)的进程。僵停进程尚不具有由父进程请求的退出状态。这些进程通常是无害的,但如果数量众多,则会占用系统资源。可以使用 pargs 和 preap 命令检查您有权检查的任何进程。如果您成为管理员,可以检查任何进程。
有关使用 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