一、pstree命令
1、命令简介
以树状图显示进程,只显示进程的名字,且相同进程合并显示。
2、常用选项及举例
2.1、以树状图显示进程,还显示进程PID:
[root@hpf-linux ~]# pstree -p init(1)─┬─auditd(937)───{auditd}(938) ├─crond(1322) ├─dbus-daemon(1041) ├─master(1312)─┬─pickup(1485) │ └─qmgr(1326) ├─mingetty(1337) ├─mingetty(1339) ├─mingetty(1341) ├─mingetty(1343) ├─mingetty(1348) ├─mingetty(1350) ├─nginx(1078)───nginx(1080) ├─rpc.statd(997) ├─rsyslogd(957)─┬─{rsyslogd}(958) │ ├─{rsyslogd}(960) │ └─{rsyslogd}(961) ├─sshd(1101)───sshd(1351)───bash(1353)───pstree(1753) └─udevd(368)─┬─udevd(1346) └─udevd(1347)
2.2、以树状图显示指定运行的pid进程以及子孙进程,如果有-p参数则同时显示每个进程的PID:
[root@hpf-linux ~]# pstree -p 368 udevd(368)─┬─udevd(1346) └─udevd(1347)
二、ps命令
1、命令简介
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top、htop命令。
2、常用选项
a 显示所有进程
-e 显示所有进程
f 显示程序间的关系
u 指定用户的所有进程
-C<命令> 列出指定命令的状况
x 通常与 a 这个参数一起使用,可列出较完整信息。
-o 自定义要显示的信息
-p<pid> 显示指定pid的进程
3、使用举例
3.1、出目前所有的正在内存当中的程序:
[root@hpf-linux ~]# ps aux //或者使用ps -ef 两者的结果差不多 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 2900 1412 ? Ss Jul15 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S Jul15 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jul15 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S Jul15 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S Jul15 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S Jul15 0:00 [watchdog/0] ......................................
说明:
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
3.2、显示指定用户进程
使用"-u"选项后跟用户名来过滤所属用户的进程,多个用户名可以用逗号分隔。
[root@hpf-linux ~]# ps -f -u nobody UID PID PPID C STIME TTY TIME CMD nobody 1815 1814 0 00:26 ? 00:00:00 nginx: worker process
3.3、通过cpu或者内存的使用排序进程
我们在想显示系统中消耗最高CPU或者内存资源的进程时,一般会想到top命令通过键入P或者M来动态由高到低排序的显示,而ps命令中可以用'--sort'指定多个字段,并用逗号分割。除此之外,字段前面还可以跟上'-'或者'+'的前缀来相应地表示递减和递增排序:
[root@hpf-linux ~]# ps aux --sort=-pcpu | head -5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 2900 1412 ? Ss Jul15 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S Jul15 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jul15 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S Jul15 0:00 [ksoftirqd/0]
3.3、改变显示的列
下面的命令会只显示pid、用户名、cpu、内存、命令列:
[root@hpf-linux ~]# ps -e -o pid,uname,pcpu,pmem,comm PID USER %CPU %MEM COMMAND 1 root 0.0 0.1 init 2 root 0.0 0.0 kthreadd 3 root 0.0 0.0 migration/0 4 root 0.0 0.0 ksoftirqd/0 5 root 0.0 0.0 stopper/0 .........................................
3.4、显示进程运行的时间
运行的时间指的是,进程已经运行的时间。运行时间的列并没有默认显示,需要使用-o选项带入。
[root@hpf-linux ~]# ps -e -o pid,comm,etime PID COMMAND ELAPSED 1 init 08:13:49 2 kthreadd 08:13:49 3 migration/0 08:13:49 4 ksoftirqd/0 08:13:49 5 stopper/0 08:13:49 .................................
3.5、通过名字或者进程id显示进程
通过"-C"选项后面加上名字或者命令来搜索进程:
[root@hpf-linux ~]# ps -C nginx PID TTY TIME CMD 1814 ? 00:00:00 nginx 1815 ? 00:00:00 nginx
要通过进程id显示进程,就使用"-p"选项,并且还可以通过逗号分隔来指定多个进程id。
[root@hpf-linux ~]# ps -f -p 28,23,45 UID PID PPID C STIME TTY TIME CMD root 23 2 0 Jul15 ? 00:00:00 [khubd] root 28 2 0 Jul15 ? 00:00:00 [khungtaskd] root 45 2 0 Jul15 ? 00:00:00 [deferwq]
"-C"必须提供精确的进程名,并且它并不能通过部分名字或者通配符查找。为了更灵活地搜索进程列表,通常使用grep命令。
[root@hpf-linux ~]# ps aux |grep nginx root 1814 0.0 0.0 5380 636 ? Ss 00:26 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 1815 0.0 0.0 5564 988 ? S 00:26 0:00 nginx: worker process root 1879 0.0 0.0 5980 740 pts/0 S+ 00:56 0:00 grep nginx
3.6、将ps转换为类是top命令的实时进程查看器
[root@hpf-linux ~]# watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -5'
Every 10.0s: ps -e -o pid,uname,cmd,pmem,pcpu --so... Thu Jul 16 01:02:26 2015 PID USER CMD %MEM %CPU 1 root /sbin/init 0.1 0.0 2 root [kthreadd] 0.0 0.0 3 root [migration/0] 0.0 0.0 4 root [ksoftirqd/0] 0.0 0.0
输出会每秒刷新状态,但是这其实跟top不同。你会发现top/htop命令的输出相比上面的ps命令刷新得更频繁。 这是因为top输出是结合了cpu使用值和内存使用值后的排序值。但是上面的ps命令是一个更简单的行为的排序,每次获取一列(像学校的数学),因此它不会像top那样快速更新。
参考:
http://linux.cn/thread/12046/1/1/