Linux 系统中 ps 命令是 Process Status 的缩写,用来列出系统中当前运行的进程。ps 列出的是当前那些进程的快照,就是执行 ps 命令的那个时刻的那些进程,如果想要动态的显示进程信息,可以使用 top 命令;
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是查看当前进程,而 ps 命令就是最进本的同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的;
ps 为我们提供了进程的一次性查看,它所提供的查看结果并不是动态连续的;如果想要对进程时间监控,应该使用 top 命令;
kill 用于杀死进程;
linux上进程的5种状态
ps工具标识进程的5种状态码
命令格式 - ps [参数]
命令功能 - 用来显示当前进程的状态
命令参数 -
命令实例 -
实例一:显示所有进程信息
命令
xxxxxxxxxx
11ps -A
输出
xxxxxxxxxx
101Qs-MacBook-Pro:dir4 qiu$ ps -A
2 PID TTY TIME CMD
3 1 ?? 6:07.63 /sbin/launchd
4 40 ?? 0:04.77 /usr/sbin/syslogd
5 41 ?? 0:12.18 /usr/libexec/UserEventAgent (System)
6 43 ?? 0:44.81 /Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns/RTPro
7 45 ?? 0:03.63 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
8 46 ?? 0:03.83 /usr/libexec/kextd
9
10···
说明
实例二:显示指定用户信息
命令
xxxxxxxxxx
11ps -u root
输出
xxxxxxxxxx
91Qs-MacBook-Pro:dir4 qiu$ ps -u root
2 UID PID TTY TIME CMD
3 0 1 ?? 6:07.91 /sbin/launchd
4 0 40 ?? 0:04.77 /usr/sbin/syslogd
5 0 41 ?? 0:12.19 /usr/libexec/UserEventAgent (System)
6 0 43 ?? 0:44.81 /Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns
7 0 45 ?? 0:03.64 /System/Library/Pri
8
9···
说明
实例三:显示所有进程信息,连同命令行
命令
xxxxxxxxxx
11ps -ef
输出
xxxxxxxxxx
91Qs-MacBook-Pro:dir4 qiu$ ps -ef
2 UID PID PPID C STIME TTY TIME CMD
3 0 1 0 0 二01下午 ?? 6:08.21 /sbin/launchd
4 0 40 1 0 二01下午 ?? 0:04.77 /usr/sbin/syslogd
5 0 41 1 0 二01下午 ?? 0:12.20 /usr/libexec/UserEventAgent (System)
6 0 43 1 0 二01下午 ?? 0:44.83 /Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns/RTProtectionDaemon.app/Contents/MacOS/RTProtectionDaemon -i Malwarebytes-Mac-3.7.34.2263.pkg
7 0 45 1 0 二01下午 ?? 0:03.64 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
8
9···
说明
实例四:ps 与 grep 常用组合用法,查找特定进程
命令
xxxxxxxxxx
11ps -ef|grep ssh
输出
xxxxxxxxxx
51Qs-MacBook-Pro:dir4 qiu$ ps -ef|grep ssh
2 501 29027 1 0 11:16上午 ?? 0:00.03 /usr/bin/ssh-agent -l
3 501 29877 27147 0 11:38上午 ttys003 0:00.00 grep --color=auto ssh
4Qs-MacBook-Pro:dir4 qiu$
5
说明
实例五:将目前属于您自己的这次登录的 PID 与相关信息列示出来
命令
xxxxxxxxxx
11ps -l
输出
xxxxxxxxxx
91Qs-MacBook-Pro:dir4 qiu$ ps -l
2 UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
3 501 26860 26859 4006 0 31 0 4325196 3300 - S+ 0 ttys000 0:00.06 -bash
4 501 26871 26863 4006 0 31 0 4325196 3432 - S+ 0 ttys001 0:00.06 -bash
5 501 27099 27072 4006 0 31 0 4317004 3140 - S+ 0 ttys002 0:00.06 -bash
6 501 27147 27111 4006 0 31 0 4325196 3212 - S 0 ttys003 0:00.08 -bash
7 501 28042 27797 4006 0 31 0 4333388 3452 - S+ 0 ttys005 0:00.06 -bash
8Qs-MacBook-Pro:dir4 qiu$
9
说明
各相关信息的意义:
F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID !
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍
NI 这个是 Nice 值,在下一小节我们会持续介绍
ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID。
实例六:列出目前所有正在内存当中的程序
命令
xxxxxxxxxx
11ps aux
输出
xxxxxxxxxx
81Qs-MacBook-Pro:dir4 qiu$ ps aux
2USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
3_coreaudiod 169 10.2 0.1 4394448 14684 ?? Ss 二01下午 86:56.72 /usr/sbin/coreaudiod
4qiu 26460 4.7 5.5 11396980 914844 ?? S 11:15上午 3:41.15 /Applications/WebStorm.app/Co
5_windowserver 26418 4.0 0.9 7096432 147456 ?? Ss 11:15上午 2:55.26 /System/Library/PrivateFramew
6qiu 26582 3.8 1.3 5078668 212736 ?? S 11:16上午 0:53.71 /Applications/Google Chrome.a
7
8···
说明
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:该程序的实际指令
实例七:日出列示程序树的程序显示
命令
xxxxxxxxxx
11ps -axjf
输出
xxxxxxxxxx
91Qs-MacBook-Pro:dir4 qiu$ ps -axjf
2USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND UID C STIME TTY
3root 1 0 1 0 0 Ss ?? 6:09.74 /sbin/launchd 0 0 二01下午 ??
4root 40 1 40 0 0 Ss ?? 0:04.78 /usr/sbin/syslog 0 0 二01下午 ??
5root 41 1 41 0 0 Ss ?? 0:12.26 /usr/libexec/Use 0 0 二01下午 ??
6root 43 1 43 0 0 S<s ?? 0:44.95 /Library/Applica 0 0 二01下午 ??
7root 45 1 45 0 0 Ss ?? 0:03.65 /System/Library/ 0 0 二01下午 ??
8
9···
说明
实例八:找出与 cron 与 syslog 这两个服务有关的 PID 号码
命令
xxxxxxxxxx
11ps aux | egrep '(cron|syslog)'
输出
xxxxxxxxxx
41Qs-MacBook-Pro:dir4 qiu$ ps aux | egrep '(cron|syslog)'
2root 40 0.0 0.0 4351396 956 ?? Ss 二01下午 0:04.79 /usr/sbin/syslogd
3qiu 29885 0.0 0.0 4258736 176 s003 S+ 11:43上午 0:00.00 egrep --color=auto (cron|syslog)
4
说明
其他实例:
可以用 | 管道和 more 里连接起来分页查看
xxxxxxxxxx
11ps -aux | more
把所有进程显示出来,并输出到 ps001.txt 文件
xxxxxxxxxx
11ps -aux > ps001.txt
输出指定的字段
x
1ps -o pid,ppid,pgrp,session,tpgid,comm
xxxxxxxxxx
11[root@localhost test6]# ps -o pid,ppid,pgrp,session,tpgid,comm
2 PID PPID PGRP SESS TPGID COMMAND
317398 17394 17398 17398 17478 bash
417478 17398 17478 17398 17478 ps
5[root@localhost test6]#