#linux #netlink #api-bindings

taskstats

Linux任务统计接口的高级封装

2个版本

0.1.1 2020年5月17日
0.1.0 2020年5月17日

#500 in 操作系统

MIT许可协议

54KB
1.5K SLoC

taskstats-rs

此crate提供了Linux 任务统计接口的高级封装。

目前仅在Taskstats结构体中公开了有限的信息,但可以轻松添加新字段以供未来版本使用。如果您觉得taskstats结构体中的其他字段对您有用,请随时提交PR添加它们。

示例

查询任务的聚合taskstats

let mut conn = TaskstatsConnection::new()?;
let stats = conn.get_pid_stats(1)?;
// ...

监听已退出任务的taskstats

let conn = TaskstatsConnection::new()?;
let cpu_mask = CString::new("0-7\0".to_owned()).unwrap().into_boxed_c_str();
let mut listener = TaskstatsListener::register(conn, cpu_mask)?;
loop {
    let (pid, stats) = listener.get_next()?;
    // ...
}

开发

raw.rs文件在srcsrc/netlinksrc/genetlink中生成,然后手动调整以适应需求。

注意

此crate仅公开pid/任务统计信息,但不公开tgid/进程,因为内核并没有传递很多有用的tgid信息。建议您依赖于pid统计信息,并手动对进程进行汇总。

依赖

~2.5MB
~53K SLoC