在程序开发测试阶段或者运维阶段,一般需要知道进程的内存、CPU占用等情况。在带有桌面的发行版linux系统中,有多种任务管理器可以用来查看进程运行情况。在一般的服务器或者嵌入式linux系统中,一般没有界面。常用ps、top类的指令来查看进程运行情况。
1.ps命令
1.1 ps简介
先使用指令,
man ps
查看ps使用手册。可以看到这段话
ps displays information about a selection of the active processes
表明ps指令可选择的展示活跃进程的信息,它只能显示某个特定时间点的信息
1.2 ps的使用方式
如下
ps [options]
但是ps的参数非常的多,经常使用的参数如下
-e 显示所有进程;
-f 显示完整格式的输出;
-l 长格式输出;
-u userlist 显示属于 userlist 列表中某个用户 ID 所有的进程;
–forest 用层级结构显示出进程和父进程之间的关系;
使用示例
- ubuntu@test:~/workspace$ ps -ef
信息列说明
UID 启动该进程的用户;
PID 进程 ID;
PPID 父进程的 PID(如果该进程是由另一个进程启动的);
C 进程生命期中的 CPU 利用率;
STIME 进程启动时的系统时间;
TTY 进程是从哪个终端设备启动的;
TIME 运行进程的累计 CPU 时间;
CMD 启动的程序名称;
ubuntu@test:~/workspace$ ps -el
与ps -ef相比多出的信息列说明
F:内核分配给进程的系统标志;
S:进程的状态(O 代表正在运行;S 代表在休眠;R 代表可运行,正等待运行;Z 代表
僵化,已终止但找不到其父进程;T 代表停止);
PRI:进程的优先级(数字越大,优先级越低);
NI:谦让度(nice),用于决定优先级;
ADDR:进程的内存地址;
SZ:进程被换出时所需交换空间的大致大小;
WCHAN:进程休眠的内核函数地址;
- ubuntu@test:~/workspace$ ps -ef --forest
–forest 选项着实讨人喜欢。该选项能够使用 ASCII 字符来绘制可爱的图表以显示进程的层级
信息。这种格式可以轻而易举地跟踪子进程和父进程。
- ps -ef | grep 进程关键字 例如 ps -ef | grep carria
ps其他常用的形式
- ps -u username 显示username进程
2.top指令
ps 命令虽然在收集系统中运行进程的信息时非常有用,但也存在不足之处:只能显示某个
特定时间点的信息。如果想观察那些被频繁换入和换出内存的进程,ps 命令就不太方便了。这正是 top 命令的用武之地。与 ps 命令相似,top 命令也可以显示进程信息,但采用的是实时方式。
top指令运行如下图所示
需要注意下面的信息列
- VIRT 进程虚拟内存
- RES 进程占用物理内存
- SHR 进程与其他进程共享的内存
关于进程所占用的这三种内存之间的关系,可参考链接: 详解进程的虚拟内存,物理内存,共享内存。
我们一般最关心进程占用的真实物理内存
真实物理内存 = RES - SHR
如果,需要查看一个具体进程的信息,可以有两种方法
- top过滤
先按o键
输入COMMAN=命令(例如:COMMAND=sshd)
- 使用组合命令
top -c -p $(pgrep -d’,’ -f 命令名) (例如:top -c -p $(pgrep -d’,’ -f sshd))
3. htop
如果条件允许,linux所在设备连接网络并且没有做过多的裁剪,可以下载htop来查看进程的运行情况。
htop的运行情况如下:
它对进程的管理就更直观了,比较常用的操作
- 按u键,可选择具体用户对应的进程
- F3 ,选择进程,可直接使用进程名
ps和top指令的详细说明,推荐参考《Linux命令行与脚本编程大全 第四版》。本文多是参考其中。