Linux下GTK实现系统监视器
来源:互联网 发布:数据挖掘 软件 编辑:程序博客网 时间:2024/06/10 15:47
系统监视器实际上PROC文件系统的整合,通过对某一时刻PROC文件系统中的文件分析,可以得到此刻系统的详细状态信息,如CPU的使用、内存的使用、当前处于活动状态和休眠状态的进程查看……等,通过系统监视器的编写,也可以增强我们对Linux的PROC文件系统的了解,设计阶段,结合任务说明,我的监视器主要分为以下几个功能:
(1). CPU信息模块
CPU信息包括CPU物理信息以及CPU的时刻使用信息,CPU物理信息主要存放于”/proc/cpuinfo”文件中,本次打算提取以下信息:
序号
字段名
含义
信息值
1
Model name
型号和主频
Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
2
Cache size
CACHE 大小
3072 KB
3
Cpu MHz
主频
2500
4
Cpu cores
核心数
1
5
Address sizes
寻址位数
42 bits physical, 48 bits virtual
在该文件中,cpu主频:CPU MHz此值随时间而变化,因此显示的信息需要随时更新。此外,还需要提取出CPU的时刻使用率。
在”/proc/stat”文件中,有如下信息:
cpu 1880 214 2622 23722 100 0 52 0 0 0
cpu0 987 214 1186 11623 64 0 19 0 0 0
cpu1 892 0 1435 12099 35 0 33 0 0 0
计算CPU的利用率,需要用到前五个数据(计算CPU利用率可以查到不同版本,用前五个计算的较为常见),分别为:user, nice, system, idle, iowait. CPU时间可以通过以下等式计算:
CPU(total) =user + nice + system +idle + iowait
计算CPU利用率时,采样两个足够短的时间,分别为t1,t2。则CPU利用率可以用下等式计算
pcpu = 100 *(total – idle) / total
total =total(t2) – total(t1)
idle =idle(t2) – idle(t1)
由于CPU利用率随时间改变,因此对于显示出的CPU利用率,需要随时更新,我设置为1秒更新一次。
(2). 内存信息模块
序号
字段名
含义
信息值
1
MemTotal
内存总大小
2063728 kB
2
MemFree
空余内存大小
1174408 kB
3
Buffers
缓存大小
52232 kB
4
SwapTotal
交换区总大小
1046524 kB
5
SwapFree
交换区空余大小
1046524 kB
相对于CPU来说,内存部分的信息较为简单,上表中内存的信息在文件”/proc/meminfo”中对于的字段即可以寻找到。此外还需要计算内存和交换分区的使用率,内存使用率按照以下公式计算:
pmm= (MemTotal – MemFree) / MemTotal
pswap= (SwapTotal – SwapFree) / SwapTotal
由于内存和交换分区使用率也随着时间而变化,因此上述两个值得信息我也设计每秒更新一次。
(3). 进程信息模块
进程信息模块主要是获得进程的详细信息,同时,我设计了刷新功能、用PID搜索进程详细信息功能以及杀死进行的功能。
Linux中,每一个进程在目录”/proc/”下对应一个文件夹,该文件夹名称为进程号,因此符合该条件的文件夹的数量即为进程数,对于每一个进程来说,其信息在”/proc/<pid>/”路径下。本次的信息主要用到了两个文件,分别为:”/proc/<pid>/status”和”/proc/<pid>/stat”
第一个文件中主要获得了以下信息:
序号
字段名
含义
1
Name
进程名
2
State
状态(S:休眠,R:运行)
3
Pid
进程号
4
PPid
父进程号
5
VmSize
占用内存大小
为了获得进程的优先级,需要查看stat文件,在stat文件中也保存着关于该进程的一些详细信息,包括进程名,运行状态,PID等,这些信息已在status中获得,本次主要获得优先级信息即可。priority在该文件的第18位中。
通过上述过程即可获得关于进程所需要的信息,此外,还需要有通过PID查看进程、更新进程信息以及杀死进程的功能。为此,设计了一个GtkEntry,在其中输入进程号即可以进行查询,为了方便用户使用,当点击某一进程的时候,进程号会自动填写到entry中。
进程的搜索是进入”/proc/<pid>/”这个目录,如果该目录不存在则输出提示信息,然后再根据上述过程弹出对话框展示此进程详细信息。
杀死进程需要调用系统命令:system(“kill <pid>”),该功能的实现较为简单,不过杀死进程的过程中会遇到权限不够的问题,因此最好在杀死进程时进行权限的判断。
(4). 系统信息查看模块
系统信息查看模块比较简单,不需要更新,因此设置一个label显示该信息即可,获得的信息如下表所示。
序号
字段名
内容
1
sysname
Linux
2
nodename
Ubuntu
3
release
3.14.34
4
version
#4 SMP Fri Mar 6 03:28:29 PST 2015
5
machine
i686
(5). 简单功能的实现
除了几个大的模块信息之外,我还设计了以下一些额外方面用户使用的功能:
l 状态栏:一些常见的信息我再状态栏给予了显示,而不是直接采用标签,状态栏可以更灵活可变。
l 关机注销:提供常见对机器操作的功能,不过需要采用root身份登陆,如果不是root身份时,会弹出窗口警告。
l 曲线作图:曲线图有助于用户对某一物理信息有着直观上的了解,我设计了CPU利用率图像,内存使用率图像以及交换区使用率图像以方便用户有一个直观的了解。
l 时间:在状态栏中会显示系统当前时间,同时,通过系统运行时间可以获得到系统的开机时间。
l 多进程:开发出从资源管理器中可以直接打开程序的方式,不仅是程序,也可以打开文本,只需要输入对应的命令即可,起到类似于一个小的终端的功能。
l 帮助:系统帮助有助于使用者对本系统有一个大概的了解,也可以获得开发者的联系方式。
总体运行效果如下图所示:
1. CPU信息部分
2.内存以及交换分区使用率
3.进程信息查看
4.系统信息查看
5.关机提示
6.杀死进程
7. 运行子进程
代码内容详情请查看我的资源。
- Linux下GTK实现系统监视器
- linux下GTK+配置
- Linux下查看进程(ps或者top),或者使用图形化(系统监视器) .
- 编程实现性能监视器监视系统性能
- Linux增加“系统监视器”的快捷键
- Ubuntu系统下GTK安装
- Ubuntu系统下GTK安装
- Linux 下 GNOME GTK+编程
- linux下eclipse配置gtk
- linux C++ GTK编程实现
- 在linux下使用gtk的gdk-pixbuf实现类似windows下的透明贴图
- linux下的X11图形系统介绍之GTK图形库(转)
- 关于GTK -- Linux下的GTK图形界面编程
- GTK学习笔记之Linux下Gtk环境搭建
- linux系统下实现聊天室
- 读取linux /proc/文件信息,用GTK编程实现简单的系统管理器
- htop--linux下最强大的进程监视器
- 系统监视器方案
- Android ORMLite 框架的入门用法
- 软件加密基本思路
- PPP点对点与frame-relay帧中继
- 利用Hbase的coprocessor实现增量式Apriori算法
- sql特殊字符处理
- Linux下GTK实现系统监视器
- JSTL标签库的使用和介绍
- mysql日志
- 判断当前用户是否为root
- 设计模式之Builder Model(笔记)
- VC运行时复制函数代码的注意事项
- 黑马程序员——Java概述
- SqliteOpenHelper封装——DBManager模板
- 今天又是6级