Linux下GTK实现系统监视器

系统监视器实际上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. 运行子进程


代码内容详情请查看我的资源。


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值