通过前面章节的一些实例的学习,想必你已经知道了使用 ps 命令可以查看进程的信息,但除了 ps 命令,我们还可以使用 pstree 命令和 pgrep 命令查看当前进程的信息。
使用 ps 命令,可以查看当前的进程。默认情况下,ps 命令只会输出当前用户并且是当前终端(比如,当前 Shell)下调用的进程的信息。其输出将类似如下所示:
[linuxyz.cn]$ ps
PID TTY TIME CMD
4380 pts/0 00:00:00 bash
4414 pts/0 00:00:00 ps
我们从上面的输出中可以看到,默认情况下,ps 命令会显示进程 ID(PID)、与进程关联的终端(TTY)、格式为“[dd-]hh:mm:ss”的进程累积 CPU 时间(TIME),以及可执行文件的名称(CMD)。并且,输出内容默认是不排序的。
使用标准语法显示系统中的每个进程:
[linuxyz.cn]$ ps -ef | head -2
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Janl4 ? 00:00:02 init [5]
使用 BSD 语法显示系统中的每个进程:
[linuxyz.cn]$ ps aux | head -2
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2160 648 ? Ss Janl4 0:02 init [5]
使用 BSD 样式选项会增加进程状态(STAT)等信息作为默认显示,你也可以使用 PS_FORMAT 环境变量重写默认的输出格式。
查看系统中 httpd 进程的信息:
ps aux | grep httpd
使用 pstree 命令,可以显示进程树的信息:
[linuxyz.cn]$ pstree
init-+-acpid
|-atd
|-auditd-+-audispd---{audispd}
| `-{auditd}
|-automount---4*[{automount}]
|-avahi-daemon---avahi-daemon
|-java-+-java---29*[{java}]
| `-14*[{java}]
|-java-+-java---34*[{java}]
| `-14*[{java}]
|-java---20*[{java}]
|-java---292*[{java}]
| `-sshd---bash
|-start_derby.sh---java---45*[{java}]
|-surf---8*[{surf}]
|-syslogd
|-tomcat---sleep
|-udevd
|-watchdog/0
|-watchdog/1
|-xfs
|-xinetd
`-yum-updatesd
pstree 命令以树形结构的形式显示系统中所有当前运行的进程的信息。此树形结构以指定的 PID 为根,若没有指定 PID,则以 init 进程为根。下面,我们看一个显示指定 PID 的进程树的例子:
[linuxyz.cn]$ pstree 4578
httpd-11*[httpd]
上述输出内容的含义是,PID 是 4578 的 httpd 进程下有 11 个 httpd 子进程。在显示时,pstree 命令会将一样的分支合并到一个方括号中,并在方括号前显示重复的次数。
如果 pstree 命令指定的参数是用户名,那么就会显示以此用户的进程为根的所有进程树的信息。其显示内容将类似如下所示:
[linuxyz.cn]$ pstree mozhiyan
Xvnc
dbus-daemon
dbus-launch
dcopserver
gconfd-2
kded
kdeinit-+-bt-applet
|-esc-+-esc---9*[{esc}]
| `-esc---6*[{esc}]
|-2*[kio_file]
|-kio—media
|-klauncher
`-kwin
kdesktop
kicker
klipper
ksmserver
bash---pstree
start_kdeinit
xstartup---startkde---kwrapper
使用 pgrep 命令,可以基于名称或其他属性查找进程。
pgrep 命令会检查当前运行的进程,并列出与选择标准相匹配的进程的 ID。例如,查看 root 用户的 sshd 进程的 PID:
[linuxyz.cn]$ pgrep -u root sshd
2877
6572
18563
列出所有者是 root 和 daemon 的进程的 PID:
pgrep -u root,daemon