最近要做一個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 記錄著系統執行的環境變量
其他的改天碰到再看吧.