1 ps命令
ps命令能查看系统中进程相关的信息,对于ps命令而言,可以带的参数实在太多了,其实不需要记住所有的参数,只要记住自己常用的就行了。比如ps -ef可以显示系统上运行的所有进程,输入:
ps -ef|more
结果为:
ps -ef
可以显示出系统上运行的所有进程,其中-e表示显示所有运行在系统上的进程,-f
表示则扩展打印出一些列,这些列包含很多重要信息,比如上图所示,其中:
UID表示启动进程的用户;
PID和PPID表示进程和该进程父进程的ID;
C表示进程周期中的CPU利用率;
STIME表示进程启动的系统时间;
TTY表示进程启动的终端设备;
TIME表示进程占用的CPU时间,注意这不是运行时间;
CMD表示启动的程序名称;
上面的参数应该非常多了,如果想要更多的参数的话加上-l
(小写的L
)
比如输入:
ps -l
结果为:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 3676 3665 0 80 0 - 6339 wait pts/3 00:00:00 bash
4 R 1000 5547 3676 0 80 0 - 7664 - pts/3 00:00:00 ps
可以发现只用一个-l参数的话只会显示当前控制台下属于当前用户的进程,新增的列有:
F表示内核分配给进程的系统标记;
S表示状态,状态有以下几种:
D 不可中断 Uninterruptible sleep (usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
PRI表示进程的优先级,数字越大表示优先级越低
NI谦让度值用来参与决定优先级
ADDR石金成的内存地址
SZ表示进程被换出,所需交换空间的大致大小
WACHAN表示进程休眠的内核函数的地址
如果输入ps l的话与ps -l的结果基本相同,前者是BSD风格,后者是unix风格,比如输入:
ps l
结果为:
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 3676 3665 20 0 25356 6248 wait Ss pts/3 0:00 /bin/bash
4 1000 12893 3676 20 0 30656 1500 - R+ pts/3 0:00 ps l
其中
VSZ表示进程在内存中的大小,以KB为单位
RSS进程在未换出来时的占用的物理内存
STAT代表进程转台的双字符状态码,这个双字符状态码的第一个字符和unix风格的含义相同,第二个字符为:
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
+ 位于后台的进程组;
l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
还有一个用法我个人非常喜欢,输入ps axuf,这个指令可以显示父子进程的关系:
ps axuf
结果为:
2 top命令
ps
命令有一个缺点,就是只能在某个特定时间点显示进程信息,如果想动态显示内存变化等,可以使用top信息。
输入:
top
结果为:
该结果中:
第一行
有4个参数,分别是当前系统时间(时:分:秒),系统运行时间(时:分),登陆的用户个数,系统的平均负载。其中平均负载有3个值,分别是最近1分钟,最近5分钟和最近15分钟的平均负载,值越大说明负载越高。一般情况下,最近一分钟如果有高负载不足为奇,但如果最近15分钟的负载都非常高,那就有问题了。一般情况下,如果系统负载超过2,就说明系统比较繁忙。
第二行
显示了进程的个数信息,有5个参数,分别是进程总个数,当前运行进程个数,睡眠的今晨个数,停止的今晨个数,僵尸进程个数。
第三行
显示了CPU相关信息,分别是us:用户态使用的cpu时间比
sy:系统态使用的cpu时间比
ni:用做nice加权的进程分配的用户态cpu时间比
id:空闲的cpu时间比
wa:cpu等待磁盘写入完成时间
hi:硬中断消耗时间
si:软中断消耗时间
st:虚拟机偷取时间
第四行
是物理内存相关信息,分别是总共的物理内存,空闲的物理内存,当前使用了多少物理内存,缓存区占用的内存,其中
cache是高速缓存,用于CPU和内存之间的缓冲
buffer是I/O缓存,用于内存和硬盘的缓冲
第五行
是交换空间的内存。
剩下的都是对一个个进程的描述了,其中
PID是进程的ID
USER是进程所属用户的名字
PR表示进程的优先级
NI表示进程的谦让度值
VIRT表示虚拟内存大小
RES表示物理内存大小
SHR表示进程或其他进程共享的内存总量
S是进程的状态
CPU是进程使用的cpu比例
MEM是进程使用的内存占可用内存的比例
TIME是从进程启动后到当前占用的cpu时间,而不是运行的总时间
COMMAND是进程对应的程序名
默认情况下,是按照cpu使用率排序的,如果想要修改排序标准,按f后移动上下方向键到新的字段上,然后输入s,然后按q退出就行了。