ps命令
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
语法
ps [参数]
参数
-a 显示所有终端机下执行的进程,除了阶段作业领导者之外。
a 显示现行终端机下的所有进程,包括其他用户的进程。
-A 显示所有进程。
-c 显示CLS和PRI栏位。
c 列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。
-C<指令名称> 指定执行指令的名称,并列出该指令的进程的状况。
-d 显示所有进程,但不包括阶段作业领导者的进程。
-e 此参数的效果和指定"A"参数相同。
e 列出进程时,显示每个进程所使用的环境变量。
-f 显示UID,PPIP,C与STIME栏位。
f 用ASCII字符显示树状结构,表达进程间的相互关系。
-g<群组名称> 此参数的效果和指定"-G"参数相同,当亦能使用阶段作业领导者的名称来指定。
g 显示现行终端机下的所有进程,包括群组领导者的进程。
-G<群组识别码> 列出属于该群组的进程的状况,也可使用群组名称来指定。
h 不显示标题列。
-H 显示树状结构,表示进程间的相互关系。
-j或j 采用工作控制的格式显示进程状况。
-l或l 采用详细的格式来显示进程状况。
L 列出栏位的相关信息。
-m或m 显示所有的执行绪。
n 以数字来表示USER和WCHAN栏位。
-N 显示所有的进程,除了执行ps指令终端机下的进程之外。
-p<进程识别码> 指定进程识别码,并列出该进程的状况。
p<进程识别码> 此参数的效果和指定"-p"参数相同,只在列表格式方面稍有差异。
r 只列出现行终端机正在执行中的进程。
-s<阶段作业> 指定阶段作业的进程识别码,并列出隶属该阶段作业的进程的状况。
s 采用进程信号的格式显示进程状况。
S 列出进程时,包括已中断的子进程资料。
-t<终端机编号> 指定终端机编号,并列出属于该终端机的进程的状况。
t<终端机编号> 此参数的效果和指定"-t"参数相同,只在列表格式方面稍有差异。
-T 显示现行终端机下的所有进程。
-u<用户识别码> 此参数的效果和指定"-U"参数相同。
u 以用户为主的格式来显示进程状况。
-U<用户识别码> 列出属于该用户的进程的状况,也可使用用户名称来指定。
U<用户名称> 列出属于该用户的进程的状况。
v 采用虚拟内存的格式显示进程状况。
-V或V 显示版本信息。
-w或w 采用宽阔的格式来显示进程状况。
x 显示所有进程,不以终端机来区分。
X 采用旧式的Linux i386登陆格式显示进程状况。
-y 配合参数"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位。
常用组合
- ps -ef
- ps aux 或 ps -aux
- ps auxc 或 ps -auxc
- ps axjf 或 ps -axjf
- ps axjfc 或 ps -axjfc
实例
- ps -ef
其中各列的内容意思如下[root@hzj ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 6679 0.0 0.1 208708 3184 ? Sl Sep03 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por root 6684 0.0 0.2 108744 3992 ? Sl Sep03 0:20 containerd-shim -namespace moby -workdir /var/lib/container polkitd 6700 0.1 0.2 48444 4000 ? Ssl Sep03 22:42 redis-server *:6379 root 6772 0.0 0.0 15232 1604 pts/0 Ss+ Sep03 0:00 redis-cli root 17928 0.0 2.2 499928 42048 ? Ssl Aug22 25:45 /usr/bin/containerd root 17929 0.0 4.0 793492 76964 ? Ssl Aug22 6:27 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont root 18445 0.0 0.6 208708 11732 ? Sl Aug22 0:01 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-por root 18450 0.0 0.5 108744 9432 ? Sl Aug22 0:50 containerd-shim -namespace moby -workdir /var/lib/container polkitd 18466 0.0 11.6 1145884 218732 ? Ssl Aug22 16:38 mysqld root 22206 0.0 0.1 32868 2740 ? S+ Sep12 0:00 mysql -uroot -p root 23927 0.0 0.0 0 0 ? S 11:15 0:00 [kworker/0:2] root 23933 0.0 0.0 0 0 ? S 11:20 0:00 [kworker/0:0] root 23949 0.0 0.0 0 0 ? R 11:25 0:00 [kworker/0:1] root 23951 0.0 0.1 155360 1888 pts/1 R+ 11:28 0:00 ps aux root 32602 0.0 0.2 32528 4216 ? S<sl Aug31 6:11 /usr/local/aegis/aegis_update/AliYunDunUpdate root 32647 1.7 0.6 128600 12080 ? S<sl Aug31 333:46 /usr/local/aegis/aegis_client/aegis_10_73/AliYunDun
UID //用户ID、但输出的是用户名 PID //进程的ID PPID //父进程ID C //进程占用CPU的百分比 STIME //进程启动到现在的时间 TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 CMD //命令的名称和参数
- ps aux
其中各列的内容意思如下[root@hzj ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 125472 3924 ? Ss Aug20 0:25 /usr/lib/systemd/systemd --switched-root --system --deseria root 2 0.0 0.0 0 0 ? S Aug20 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Aug20 0:03 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< Aug20 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S Aug20 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S Aug20 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? R Aug20 3:54 [rcu_sched] root 10 0.0 0.0 0 0 ? S< Aug20 0:00 [lru-add-drain] root 11 0.0 0.0 0 0 ? S Aug20 0:08 [watchdog/0] root 13 0.0 0.0 0 0 ? S Aug20 0:00 [kdevtmpfs]
USER //用户名 %CPU //进程占用的CPU百分比 %MEM //占用内存的百分比 VSZ //该进程使用的虚拟內存量(KB) RSS //该进程占用的固定內存量(KB)(驻留中页的数量) STAT //进程的状态 START //该进程被触发启动时间 TIME //该进程实际使用CPU运行的时间 其中STAT状态位常见的状态字符有 D //无法中断的休眠状态(通常 IO 的进程); R //正在运行可中在队列中可过行的; S //处于休眠状态; T //停止或被追踪; W //进入内存交换 (从内核2.6开始无效); X //死掉的进程 (基本很少见); Z //僵尸进程; < //优先级高的进程 N //优先级较低的进程 L //有些页被锁进内存; s //进程的领导者(在它之下有子进程); l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); + //位于后台的进程组;
- 输出指定的字段
ps -o pid,ppid,pgrp,session,tpgid,comm
pgrep
pgrep是linux中常用的通过程序名字来查询进程的命令。
语法
pgrep(选项)(参数)
选项
-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;
-l:显示进程名称;
-P:指定父进程号;
-g:指定进程组;
-t:指定开启进程的终端;
-u:指定进程的有效用户ID。
注:进程号越大,并不一定意味着进程的启动时间越晚
参数
进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。
实例
- 显示进程号
[root@hzj ~]# pgrep redis
6700
6772
- 显示进程名称包含字符串redis的所有进程
[root@hzj ~]# pgrep -l redis
6700 redis-server
6772 redis-cli
- 显示进程号最小(起始)的进程
[root@hzj ~]# pgrep -ol redis
6700 redis-server
- 显示进程号最大(终止)的进程
[root@hzj ~]# pgrep -nl redis
6772 redis-cli
pstree
pstree命令更优雅的树状显示
pstree命令以树状图显示进程间的关系(display a tree of processes)。ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰。在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程。
- 以树状图只显示进程的名字,且相同进程合并显示
pstree
- 以树状图显示进程同时还显示PID:
pstree -p
- 以树状图显示进程PID为XXX的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID
pstree [-p] <pid>