linux任务管理器.doc

上传人:自*** 文档编号:126228704 上传时间:2020-03-23 格式:DOC 页数:28 大小:493KB
返回 下载 相关 举报
linux任务管理器.doc_第1页
第1页 / 共28页
linux任务管理器.doc_第2页
第2页 / 共28页
linux任务管理器.doc_第3页
第3页 / 共28页
linux任务管理器.doc_第4页
第4页 / 共28页
linux任务管理器.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《linux任务管理器.doc》由会员分享,可在线阅读,更多相关《linux任务管理器.doc(28页珍藏版)》请在金锄头文库上搜索。

1、了解/proc文件的特点和使用方法,监控系统状态,显示系统中若干部件的使用情 况,用图形界面显示系统监控状态。 主要参考书目:,百度,google l 这个任务管理器是参考着windows下的任务管理器和老师的要求做的。对于整体布局是用GTK编写的,中间用到了常用的构件和容器比如:菜单栏,对话框,状态栏,盒子,滚动条,标签,notebook等,并且为在显示内存信息和进程信息看起来比较好看我还用到了GtkListStore、 GtkTreeViewColumn 和gtkTreelter等构件。因为过程有些复杂我在关键部位进行了注释。大致布局是先创建窗口,之后创建表格,上面是一个菜单栏,包括三个菜

2、单,并且每个菜单下设有子菜单(关闭窗口,关机、重启、注销,关于本任务管理器的介绍);下面和右侧是两个状态栏分别显示系统启动时间、系统运行时间、总进程数、CPU利用率,MEM利用率,swap利用率(实时显示则用gtk_timeout_add调用回调函数来达到每隔一段时间更新显示);中间是一个notebook,期间设有五个页面分别显示cpu信息,mem信息,硬盘信息,进程信息,系统信息,mem信息中用到了 树型列表构件,可以手动刷新,在进程信息页中可以手动刷新和手动杀死一个进程。l 读取/proc文件信息: 从/proc/stat读取cpu各状态的时间,从而通过cpu_rate= 100*(use

3、r+nice+system)/(float)(user+nice+system+idle)得到cpu的利用率 从/proc/meminfo读取内存总量和可用内存,利用1-MemFree/MemTotal得到Mem的利用率 从/proc这个目录下读取数字文件夹的数量,既是进程总数 从/proc/meminfo读取内存信息 从/proc/进程号/status读取进程名,PID及状态,/proc/进程号/statm读取进程占用内存大小 从/proc/partitions读取硬盘信息 从/proc/sys/kernel/hostanme读取主机名 从/proc/cpuinfo读取cpu信息 从/pro

4、c/version中读取操作系统类型、内核版本、gcc版本l 为了格式化显示这些读取的信息,使用了strtok字符串分割函数,sprintf函数可以从某种规则中读取出自己需要的字符串,sscanf函数则是连接两个字符串最好的操作参数。源代码: 编译:gcc -o os os.c pkg-config -cflags -libs gtk+-2.0 运行:./os #define GTK_ENABLE_BROKEN#include#include#includedirent.h#includeunistd.h#includesys/file.h#includefcntl.h#includestri

5、ng.h#includetime.h#includemath.h#include#include#include#define DENSITY 100 /图形点密度#define PMAX 100 /最大进程数目enumNAME_COLUMN, /进程名列PID_COLUMN, /进程PID列STATUS_COLUMN,/进程状态列CPU_COLUMN, /CPU信息列MEMORY_COLUMN,/内存信息列NP_COLUMNS;enumMAJOR_COLUMN,/分区主号MINOR_COLUMN,/分区次要号BLOCK_COLUMN,/块大小NAME2_COLUMN,/分区名称NB_COLU

6、MNS;enumNAME3_COLUMN,/分类SIZE_COLUMN,/所占内存大小KB_COLUMN,NM_COLUMNS;struct Processchar name25;char pro_id10;char cpu_take10;char mem_take10;pro200;float cpu_rate,mem_rate,swap_rate;char *title6= 资源信息 , 内存信息 , 进程信息 , 磁盘信息 , 系统信息 ,说明;gdouble fuser = 0; /先前CPU使用信息gdouble ftotal = 0; /先前CPU使用总量gdouble total

7、 = 0; /当前进程总数gdouble pfuserPMAX;gdouble rate = 0; /cpu 使用率GtkWidget *window;GtkWidget *notebook;GtkWidget *vbox;GtkWidget *hbox;GtkWidget *label;GtkWidget *info_label;GString *info;GtkWidget *status_bar0;GtkWidget *cpu_draw_area;GtkWidget *mem_draw_area;GtkWidget *mem_label;GtkWidget *swap_label;Gtk

8、Widget *scrolled_window;GtkListStore *process_store;GtkListStore *disk_store;GtkListStore *mem_store;GtkWidget *mem_bar;GtkWidget *cpu_bar;GtkWidget *swap_bar;GtkWidget *ptree_view;GtkWidget *btree_view;GtkWidget *mtree_view;GtkCellRenderer *renderer;/用于显示tree view中的每个列标题GtkCellRenderer *drenderer;G

9、tkCellRenderer *mrenderer;GtkTreeViewColumn *column;/tree view控件列数GtkTreeViewColumn *dcolumn;GtkTreeViewColumn *mcolumn;GtkWidget *prefresh_button,*pdelete_button; /刷新进程按钮和结束进程按钮GtkWidget *main_vbox;GtkWidget *text;GtkWidget *table;GtkWidget *table15;/定义表格GtkWidget *frame5;/定义框架GtkWidget *frame0;Gtk

10、Widget *ptree_view;GtkWidget *button6,*label1,*cpu_rate_label,*process_label,*mem_rate_label,*time_label,*swap_rate_label,*start_time_label, *run_time_label;/定义标签gint length;int mem_flag,pro_flag;/定义两个标志变量,用来判断是否结束回调函数GtkWidget *CreateMenuItem(GtkWidget *,char *);/创建菜单项函数GtkWidget *CreateMenuFile(Gt

11、kWidget *);/创建菜单File函数GtkWidget *CreateMenuShutDown(GtkWidget *);/创建菜单Shutdown函数GtkWidget *CreateMenuHelp(GtkWidget *);/创建菜单Help函数void show_dialog (gchar *, gchar *);void get_cpu_info (GString *);void get_os_info (GString *);void draw_cpu_load_graph (void);void draw_mem_load_graph (void); gint cpu_r

12、ate_ava(void);gint mem_rate_ava(void);gint swap_rate_ava(void);gint process_num(void);gint mem_timeout(void);gint pro_timeout(void);gint start_time(void);gint sys_time(void);void get_process_info (GtkListStore *);void get_disk_info (GtkListStore *);void prefresh_button_clicked (gpointer data);void p

13、refresh_button_clicked2 (gpointer data);void pdelete_button_clicked (gpointer data);gboolean cpu_configure_event (GtkWidget *, GdkEventConfigure *, gpointer);gboolean cpu_expose_event (GtkWidget *, GdkEventExpose *, gpointer);gboolean mem_configure_event (GtkWidget *, GdkEventConfigure *, gpointer);

14、gboolean mem_expose_event (GtkWidget *, GdkEventExpose *, gpointer);gboolean load_graph_refresh (gpointer data);gboolean get_cpu_rate (gpointer data);void cpu_button_clicked(void);void mem_button_clicked(void);void pro_button_clicked(void);void disk_button_clicked(void);void sys_button_clicked(void);int select_name(char name) /查找名字是否是数字int i;for(i=0;namei!=0;i+)if(isalpha(namei)|namei=.)return 0;return 1;void delete_event(GtkWidget *window,gpointer data)/回调函数,退出窗口管理程序gtk_main_qui

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号