最近要做一個jni給java來采集系統(tǒng)信息. 支持linux和windows
采集的內(nèi)容包括. 系統(tǒng)所有進程名, cpu占用率, 內(nèi)存占用率, 系統(tǒng)內(nèi)存大小, 已用內(nèi)存大小, 可用內(nèi)存大小, 分區(qū)大小, 已用分區(qū)磁盤空間, 可用分區(qū)磁盤空間. 系統(tǒng)信息. cpu核心總數(shù)..
在windows下已經(jīng)使用系統(tǒng)提供的api一一完成并經(jīng)過調(diào)試. linux為了保證代碼的統(tǒng)一. 也用了jni的方式
linux下我老以為會有類似的api提供. 翻了半天google, 最終決定還是從/proc文件系統(tǒng)開始來.
不過/proc方式的好處就是不論哪種語言. 只要他有操作文件的能力. 都可以獲得這些信息. 而不局限于c或者c++
要點1. /proc不是物理文件系統(tǒng). 他是對內(nèi)存數(shù)據(jù)的映射, 是驅(qū)動留給開發(fā)者和使用者的接口, 所以不管你什么時候用ls指令也好, 用stat來讀 st_size也好. 他的大小都是0字節(jié).
要點2. 由于是vfs, 不要試圖往/proc中扔文件或者目錄
/proc目錄中. 有不少信息. 我這次項目涉及到如下
/proc/stat //實時的系統(tǒng)信息, 我感興趣的主要是cpu負載數(shù)據(jù)
/proc/loadavg //一段時間內(nèi) cpu負載的平均數(shù) 以及最近一次的pid
/proc/cpuinfo //cpu信息 頻率 核心 支持特性
/proc/version //系統(tǒng)內(nèi)核版本 系統(tǒng)發(fā)行版本 gcc版本
/proc目錄下每個以數(shù)字命名的子目錄都代表一個進程, 目錄名則是他的pid
/proc/(pid)/cmdline 該進程啟動時的命令, 系統(tǒng)核心進程應(yīng)該是空的
/proc/(pid)/stat 里面記錄著pid, 進程名(short_cmd)等等
/proc/(pid)/environ 記錄著系統(tǒng)執(zhí)行的環(huán)境變量
其他的改天碰到再看吧.