1. ps 是什么?
要对进程进行监测和控制, 首先必须要了解当前进程的情况, 也就是需要查看当前进程, ps 命令就是最基本进程查看命令. 使用该命令可以确定有哪些进程正在运行和运行的状态, 进程是否结束, 进程有没有僵尸, 哪些进程占用了过多的资源等等. 总之大部分信息都是可以通过执行该命令得到.
ps 是显示瞬间进程的状态, 并不动态连续; 如果想对进程进行实时监控应该用 top 命令.
基本参数:
-A : 所有的进程均显示出来, 与 -e 具有同样的效用;
-a : 显示现行终端机下的所有进程, 包括其他用户的进程;
-u : 以用户为主的进程状态 ;
x : 通常与 a 这个参数一起使用, 可列出较完整信息.
输出格式规划:
l : 较长, 较详细的将该 PID 的的信息列出;
j : 工作的格式 (jobs format)
-f : 做一个更为完整的输出.
下面我们就来一个命令进行实践, 看看不同的参数都有些什么效果.
2. 不加参数执行 ps 命令会输出什么?
这是一个基本的 ps 使用, 我们来看看控制台中执行这个命令并查看结果.
结果默认会显示 4 列信息:
PID: 运行着的命令 (CMD) 的进程编号
TTY: 命令所运行的位置(终端)
TIME: 运行着的该命令所占用的 CPU 处理时间
CMD: 该进程所运行的命令
这些信息在显示时未排序.
3. 如何显示所有当前进程?
使用 -a 参数,-a 代表 all. 同时加上 x 参数会显示没有控制终端的进程.
$ ps -ax
这个命令的结果或许会很长. 为了便于查看, 可以结合 Less 命令和管道来使用.
$ ps -ax | Less
4. 如何根据进程的用户进行信息过滤呢?
在需要查看特定用户进程的情况下, 我们可以使用 -u 参数. 比如我们要查看用户'pungki'的进程, 可以通过下面的命令:
$ ps -u pungki
5. 如何通过 CPU 和内存使用来过滤进程?
也许你希望把结果按照 CPU 或者内存用量来筛选, 这样你就找到哪个进程占用了你的资源. 要做到这一点, 我们可以使用 aux 参数, 来显示全面的信息:
$ ps -aux | Less
当结果很长时, 我们可以使用管道和 Less 命令来筛选.
默认的结果集是未排好序的. 可以通过 --sort 命令来排序.
5.1 根据 CPU 使用率来升序排序
$ ps -aux --sort -pcpu | Less
5.2 根据内存使用率来升序排序
$ ps -aux --sort -pmem | Less
5.3 我们也可以将它们合并到一个命令, 并通过管道显示前 10 个结果:
$ ps -aux --sort -pcpu,+pmem | head -n 10
6. 如何通过进程名和 PID 进行过滤呢?
使用 -C 参数, 后面跟你要找的进程的名字. 比如想显示一个名为 getty 的进程的信息, 就可以使用下面的命令:
$ ps -C getty
如果想要看到更多的细节, 我们可以使用 - f 参数来查看格式化的信息列表:
$ ps -f -C getty
7. 如何根据线程来过滤进程呢?
如果我们想知道特定进程的线程, 可以使用 -L 参数, 后面加上特定的 PID.
$ ps -L 1213
8. 如何树形的显示进程?
有时候我们希望以树形结构显示进程, 可以使用 -axjf 参数.
$ ps -axjf
或者可以使用另一个命令.
$ pstree
9. 如何显示安全信息?
如果想要查看现在有谁登入了你的服务器. 可以使用 ps 命令加上相关参数:
$ ps -eo pid,user,args
参数 -e 显示所有进程信息,-o 参数控制输出. Pid,User 和 Args 参数显示 PID, 运行应用的用户和该应用.
能够与 -e 参数 一起使用的关键字是 args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start.
10. 如何格式化输出 root 用户 (真实的或有效的 UID) 创建的进程?
系统管理员想要查看由 root 用户运行的进程和这个进程的其他相关信息时, 可以通过下面的命令:
$ ps -U root -u root u
-U 参数按真实用户 ID(RUID)筛选进程, 它会从用户列表中选择真实用户名或 ID. 真实用户即实际创建该进程的用户.
-u 参数用来筛选有效用户 ID(EUID).
最后的 u 参数用来决定以针对用户的格式输出, 由 User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND 这几列组成.
这里有上面的命令的输出结果:
11. 如何使用 PS 实时监控进程状态?
ps 命令会显示你系统当前的进程状态, 但是这个结果是静态的.
当有一种情况, 我们需要像上面第四点中提到的通过 CPU 和内存的使用率来筛选进程, 并且我们希望结果能够每秒刷新一次. 为此, 我们可以将 ps 命令和 watch 命令结合起来.
$ watch -n 1 'ps -aux --sort -pmem, -pcpu'
如果输出太长, 我们也可以限制它, 比如前 20 条, 我们可以使用 head 命令来做到.
$ watch -n 1 'ps -aux --sort -pmem, -pcpu | head 20'
这里的动态查看并不像 top 或者 htop 命令一样. 但是使用 ps 的好处是你能够定义显示的字段, 你能够选择你想查看的字段.
举个例子, 如果你只需要看名为'pungki'用户的信息, 你可以使用下面的命令:
$ watch -n 1 'ps -aux -U pungki u --sort -pmem, -pcpu | head 20'
12. 最后
你也许每天都会使用 ps 命令来监控你的 Linux 系统. 但是事实上, 你可以通过 ps 命令的参数来生成各种你需要的报表.
ps 命令的另一个优势是 ps 是各种 Linux 系统都默认安装的, 因此你只要用就行了. 不要忘了通过 man ps 来查看更多的参数.
来源: https://juejin.im/post/5bf9213ce51d452237153c5c