跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:常见任务 Oracle Solaris 11 Information Library (简体中文) |
下表介绍了用于管理系统进程的命令。
表 10-1 用于管理进程的命令
|
使用 ps 命令可以检查系统中活动进程的状态,并可显示有关进程的技术信息。此数据对于管理任务(例如,确定设置进程优先级的方式)很有用。
进程的当前状态
进程 ID
父进程 ID
用户 ID
调度类
优先级
进程的地址
已用内存
已用 CPU 时间
下表介绍了由 ps 命令报告的某些字段。具体显示哪些字段取决于您选择的选项。有关所有可用选项的说明,请参见 ps(1) 手册页。
表 10-2 ps 报告中字段的汇总
|
使用进程命令可以显示有关 /proc 目录中所列进程的详细信息。下表列出了 /proc 进程命令。/proc 目录也称为进程文件系统 (Process File System, PROCFS)。活动进程的映像按进程 ID 号存储在此位置。
表 10-3 进程命令 (/proc)
|
有关更多信息,请参见 proc(1)。
进程工具与 ps 命令的某些选项相似,区别在于这些命令提供的输出更详细。
通常,进程命令可执行以下操作:
通过使用一些进程命令,可以显示有关进程的详细技术信息或者控制活动进程。表 10-3 列出了部分 /proc 命令。
如果某个进程陷入无限循环或者执行时间过长,则可能需要停止(中止)该进程。有关使用 kill 或 pkill 命令停止进程的更多信息,请参见第 10 章。
/proc 文件系统是一个目录分层结构,其中包括状态信息和控制功能的附加子目录。
/proc 文件系统还提供了 xwatchpoint 功能,用于在进程地址空间中的各页上重新映射读写权限。该工具没有限制,并且是 MT-safe(多线程安全)的。
为了能使用 /proc 的 xwatchpoint 功能,调试工具已进行了修改,这意味着整个 xwatchpoint 进程会更快。
使用 dbx 调试工具设置 xwatchpoint 时,已取消以下限制:
由于基于 SPARC 的系统注册窗口而在栈的本地变量中设置 xwatchpoint。
在多线程进程中设置 xwatchpoint。
有关更多信息,请参见 proc(4) 和 mdb(1) 手册页。
示例 10-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
其中,process 是要显示更多信息的进程的名称。
进程 ID 显示在输出的第一列中。
# /usr/bin/pcommand pid
是要运行的 (/proc) 命令。表 10-3 列出并介绍了这些命令。
标识进程 ID。
示例 10-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
获得 cron 进程的进程 ID
显示 cron 进程的当前工作目录
显示包含 cron 进程的进程树
显示 fstat 和 fcntl 信息
# pgrep process
其中,process 是要控制的进程的名称。
进程 ID 显示在输出的第一列中。
# /usr/bin/pcommand pid
是要运行的进程 (/proc) 命令。表 10-3 列出并介绍了这些命令。
标识进程 ID。
# ps -ef | grep pid
有时,您可能需要停止(中止)进程。该进程可能处于无限循环中。或者,您可能启动了一个大型作业,并且希望在完成之前使其停止。您可以中止属于您的任何进程。超级用户可以中止系统中的任何进程,但进程 ID 为 0、1、2、3 和 4 的进程除外。中止这些进程很可能会使系统崩溃。
有关更多信息,请参见 pgrep(1)、pkill(1) 和 kill(1) 手册页。
$ pgrep process
其中,process 是要终止的进程的名称。
例如:
$ pgrep netscape 587 566
在输出中显示进程 ID。
注 - 要获得有关 Sun Ray 的进程信息,请使用以下命令:
# ps -fu user
此命令将列出所有用户进程。
# ps -fu user | grep process
此命令可为用户找到特定进程。
$ pkill [signal] process
当 pkill 命令行语法中不包含任何信号时,使用的缺省信号为 –15 (SIGKILL)。将 –9 信号 (SIGTERM) 与 pkill 命令一起使用,可以确保进程快速终止。但是,不应使用 –9 信号来中止特定进程,例如数据库进程或 LDAP 服务器进程。这样做可能丢失数据。
是要停止的进程的名称。
提示 - 使用 pkill 命令终止进程时,先尝试使用该命令本身,而不包括信号选项。等待几分钟确定进程是否终止,然后再使用带有 -9 信号的 pkill 命令。
$ pgrep process
pgrep 命令的输出中应不再列出已终止的进程。
# ps -fu user
其中,user 是要为其显示进程的用户。
进程 ID 显示在输出的第一列中。
# kill [signal-number] pid
当 kill 命令行语法中不包括任何信号时,使用的缺省信号为 –15 (SIGKILL)。将 –9 信号 (SIGTERM) 与 kill 命令一起使用,可以确保进程快速终止。但是,不应使用 –9 信号来中止特定进程,例如数据库进程或 LDAP 服务器进程。这样做可能丢失数据。
是要终止的进程的进程 ID。
提示 - 使用 kill 命令停止进程时,先尝试使用该命令本身,而不包括信号选项。等待几分钟以确定进程是否终止,然后再使用带有 -9 信号的 kill 命令。
$ pgrep pid
pgrep 命令的输出中应不再列出已终止的进程。
pargs 命令和 preap 命令可以改进进程调试。pargs 命令可以列显与实时进程或核心文件关联的参数和环境变量。preap 命令可以删除不再存在(僵停)的进程。僵停进程尚不具有由父进程请求的退出状态。这些进程通常是无害的,但如果数量众多,则会占用系统资源。可以使用 pargs 和 preap 命令检查您有权检查的任何进程。作为超级用户,您可以检查任何进程。
有关使用 preap 命令的信息,请参见 preap(1) 手册页。有关使用 pargs 命令的信息,请参见 pargs(1) 手册页。另请参见 proc(1) 手册页。
示例 10-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