最近要做一个jni给java来采集系统信息. 支持linux和windows
采集的内容包括. 系统所有进程名, cpu占用率, 内存占用率, 系统内存大小, 已用内存大小, 可用内存大小, 分区大小, 已用分区磁盘空间, 可用分区磁盘空间. 系统信息. cpu核心总数..
在windows下已经使用系统提供的api一一完成并经过调试. linux为了保证代码的统一. 也用了jni的方式
linux下我老以为会有类似的api提供. 翻了半天google, 最终决定还是从/proc文件系统开始来.
不过/proc方式的好处就是不论哪种语言. 只要他有操作文件的能力. 都可以获得这些信息. 而不局限于c或者c++
要点1. /proc不是物理文件系统. 他是对内存数据的映射, 是驱动留给开发者和使用者的接口, 所以不管你什么时候用ls指令也好, 用stat来读 st_size也好. 他的大小都是0字节.
要点2. 由于是vfs, 不要试图往/proc中扔文件或者目录
/proc目录中. 有不少信息. 我这次项目涉及到如下
/proc/stat //实时的系统信息, 我感兴趣的主要是cpu负载数据
/proc/loadavg //一段时间内 cpu负载的平均数 以及最近一次的pid
/proc/cpuinfo //cpu信息 频率 核心 支持特性
/proc/version //系统内核版本 系统发行版本 gcc版本
/proc目录下每个以数字命名的子目录都代表一个进程, 目录名则是他的pid
/proc/(pid)/cmdline 该进程启动时的命令, 系统核心进程应该是空的
/proc/(pid)/stat 里面记录着pid, 进程名(short_cmd)等等
/proc/(pid)/environ 记录着系统执行的环境变量
其他的改天碰到再看吧.
posted on 2008-10-24 14:16
Khan 阅读(2434)
评论(1) 编辑 收藏 引用 所属分类:
GCC/G++ 、
跨平台开发