ps命令大家最熟悉不过了,经常用来查看系统资源及进程的基础信息。 使用管道导出结果到grep, xarg等命令,实现一些定位的目的。
1 | ps --help |
可以看到ps
命令后面的选项大概分为5种, 简单选择项,指定选择项,输出格式项,指定长选项和混合选项。正常情况下,前面的4种选项,只能选择其中的一个选项参数,不同的种类间可以混合设置。基于兼容处理,如果有选项不能混合的话, 会显示一行warning,然后再继续显示。
具体的还可以看一下 man ps
ps
显示当前进程的一个快照信息。可以通过选项设置显示的进程,如果希望持续更新显示进程信息可以使用top
命令。
不同版本的ps
可以支持多种种类的选项。
- UNIX选项格式, 必须使用
-
连接,可以组合多个选项 - BSD选项格式,不能使用
-
连接,可以组合多个选项 - GNU类型长选项,需要两个
-
作为前导符号
不同种类的选项可能一起出现,但是可能会出现冲突。不同格式的有些选项功能是相同的,ps也会作兼容处理。
默认的,ps会显示相同用户id下的所有进程(euid=EUID)和当前终端启动的进程,输出的进程一般是未作排序的。ps会显示PID、关联的终端名TTY、累积的CPU运行时间(实际的还是总的?)TIME、可执行文件名(CMD)。
BSD格式的选项,还会显示进程的状态STAT, 使用进程名加参数的形式替换可执行文件名,当然这是可以设置的,可以设置环境变量PS_FORMAT(没试过,后面补充看看)。
默认的许多进程是不被显示的,只有通过设置了选项,符合选项设置的进程信息才能显示出来。
示例:
1 | 查看每个进程的信息,标准格式 |
更多的功能,可以组合选项尝试输出一下。
CPU运行时间
运行时间分几种,一种是程序结束的时间减去程序开始的时间,即自然时间 Wall Clock Time. 还有一种是实际占用CPU的运行时间,因为CPU同时需要运行多个程序,不断的在程序间切换。可以使用time命令查看某个程序的运行时间。
1 | Keep:~ keep$ time ps |
第一个是 real time,也就是我们说的 Wall Clock Time,也就是运行程序整个过程中流逝掉的时间;第二个是 user time,也就是 CPU 在运行你的程序,在用户态运行指令的时间;第三个是 sys time,是 CPU 在运行你的程序,在操作系统内核里运行指令的时间。而程序实际花费的 CPU 执行时间(CPU Time),就是 user time 加上 sys time, ps中显示的就是这个时间。
小常识
近期项目在测试过程中,经常出现一些包解析错误的问题。主要是通过测试仪构造了一些mac、ip或者端口递增的报文。由于某一些ip或者端口是有特殊用途的,导致在报文解析的过程中,由于这些报文的格式不符合规范而被解析成错误报文。
主要有这几个问题:
- 源mac为组播mac
- 源ip为组播ip
- 源ip为回环口ip, ipv4 127.0.0.1 ipv6 ::1
- 源目ip相同
- 端口号为2152 信令隧道报文,实际报文错误
- ip报文长度错误
- ip报文checksum错误
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。