ps
ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
-e:显示系统内的所有进程信息。
-l:使用长(long)格式显示进程信息。
-f:使用完整的(full)格式显示进程信息字段(UID,PPIP,C,STIME字段)。
-a:显示当前终端下的所有进程信息,包括其他用户的进程
-u:显示当前用户进程和内存使用情况,以用户为主的格式输出进程信息
-x:显示没有控制终端的进程,显示当前用户在所有终端下的进程
-sort:按照列名排序
ps -elf
UID:用户ID,即进程的拥有者,输出的是用户名
PID:进程ID
PPID:父进程ID
C:进程占用的CPU百分比
STIME:进程开始启动到现在的时间
TTY:登入者的终端机位置,该进程在哪个终端上运行,若与终端无关,则显示?,若为pts/0等,则表示由网络连接主机进程
TIME:进程使用的CPU(运算)时间
CMD:调用进程的命令的名称和参数
ps -aux
上述显示中,USER表示该进程的用户,PID表示进程ID,%CPU是CPU占用率,%MEM是内存占用率,VSZ是占用虚拟内存,RSS是占用实际内存,TTY是指进程运行的终端,STAT是指进程运行的状态,START是进程启动的时间,TIME是进程占用CPU的时间,COMMAND是进程对应的程序
STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程),对处于僵死状态的进程应予以手动终止。
STAT一列中,进程状态含义:
D 无法中断的休眠状态 (通常 IO 的进程)
R 正在执行中
S 静止状态,可中断睡眠
T 暂停执行,停止的进程
Z 僵尸进程,不存在但暂时无法消除
W 没有足够的记忆体分页可分配
< 高优先序的行程
N 低优先序的行程
L 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
X:死掉的进程
Ss:表示该进程是一个父进程,本身有子进程
S<:表示优先级较高的进程
SN:表示优先级较低的进程
R+:表示前台进程
Sl:表示以线程方式运行的进程
USER:启动该进程的用户账号名称
PID:该进程的ID号,在当前系统中是唯一的
%CPU:占用的 CPU 使用率
%MEM:内存占用的百分比
VSZ:占用虚拟内存(swap空间)的大小
RSS:占用常驻内存(物理内存)的大小
TTY:该进程在哪个终端上运行。“?”表未知或不需要终端,终端的次要装置号码 (minor device number of tty)
START:启动该进程的时间
TIME:该进程占用CPU时间
COMMAND:启动该进程的命令的名称
ps -A和-a的区别
ps a 显示现行终端机下的所有程序,包括其他用户的程序,除了session leaders和关联终端的进程
ps -A 显示所有程序进程
ps的aux和-elf区别
1、输出风格不同
两者的输出结果差别不大,但展示风格不同。aux是BSD风格,-elf是System V风格。
2、aux会截断command列,而-ef不会,当结合grep时这种区别会影响到结果
一直以为ps aux就可以列出所有的在运行进程,最近发现还是有些缺陷,用ps aux和-ef得到的结果居然不一样,以后尽量用-ef参数吧。
情况是这样的,我用 /bmrt/blaph/blaph/bmgctl来启动进程,由于ps aux是用BSD格式来显示结果,所以可能只会显示到/bmrt/blaph/blap,后面的都被截掉了。
这样,如果用 ps aux | grep bmgctl 来过滤该进程,可能就会误伤,获取不到bmgctl进程。
而ps -ef是用全格式的System V格式,显示出来就是带全路径的进程名,会显示出bmgctl,在 ps -ef | grep bmgctl 命令下就可以完整显示该进程了。
静态查看进程信息,可接受多种选项:
UNIX选项,需加破折号(-);
BSD选项,不需加破折号(-);
GNU长选项,需加两个破折号(-);
ps l
ps -l
F:该进程标志,说明进程权限
1:仅可复制,不可执行
4:进程权限为root
S:该进程状态,如R、S、D、T、Z
PRI:该进程优先级,值越小优先级越高
NI:该进程nice值
ADDR:该进程的内存地址
SZ:该进程交换空间大小
WCHAN:显示休眠进程的系统函数名
top
top命令可以动态查看进程,以全屏交互式的界面显示进程排名,及时跟踪包括CPU、内存等系统资源占用情况,默认情况下每三秒刷新一次,其作用基本类似于Windows系统中的任务管理器。
top命令常用参数如下:
-d 表示刷新的时间间隔,单位为s,如:top -d 5 : 指定显示信息更新时间间隔为5秒
-p 表示查看指定PID的进程
-u 表示查看指定用户的进程
-n 表示top刷新指定次数后退出
top命令使用示例:
top -d 1
top -p 100
top -n 3 >123.txt
top -u nginx
上述四条命令都表示用top查看系统进程,第一条命令表示刷新时间为1秒,第二条命令表示只查看PID100的进程,第三条表示将top刷新3次的结果写入到123.txt文档中,第四条表示只显示用户为Nginx的进程。
top命令执行后结果如下:
此时按下q键退出查看状态。
Tasks(系统任务)信息:total,总进程数;running,正在运行的进程数;sleeping,休眠的进程数;stopped,中止的进程数;zombie,僵死无响应的进程数。
CPU信息:us,用户占用;sy,内核占用;ni,优先级调度占用;id,空闲CPU;wa,I/O等待占用;hi,硬件中断占用;si,软件中断占用;st,虚拟化占用。了解空闲的CPU百分比,主要看%id部分。
Mem(内存)信息:total,总内存空间;used,已用内存;free,空闲内存;buffers,缓存区域。
Swap(交换空间)信息:total,总交换空间;used,已用交换空间;free,空闲交换空间;cached,缓存空间。
按键操作
P,根据CPU使用百分比排序;
M,根据物理内存大小排序;
N,根据启动时间排序;
c,切换显示命令名称和完整命令行;
h,获得top进程在线帮助信息;
k,根据提示输入进程PID,并按Enter终止对应进程;
1,显示CPU个数和状态;
pstree
以树状图的方式展现进程之间的派生关系,显示效果比较直观。
-a:显示每个程序的完整指令,包含路径,命令行参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序;
-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l:采用长列格式显示树状图;
-n:用程序识别码排序。预设是以程序名称来排序;
-p:显示PID;
-u:显示用户名称;
pstree -aup
可以带上|grep 查询特定进程。例如 pstree -aup | grep php
psgrep
基于名称和其他属性,来查询或显示进程;
-l,显示进程名字及PID;
-a,显示完整的命令行及PID;
-u,匹配用户ID的进程;
-n,仅显示最新进程的PID;
-o,仅显示最老进程的PID;
-t,显示匹配终端的进程PID;