2个版本
0.16.0 | 2023年10月29日 |
---|---|
0.16.0-RC1 | 2023年6月20日 |
#852 in Unix API
629,646 个月下载量
用于 185 个crate (3个直接使用)
305KB
5.5K SLoC
procfs
这个crate是linux上的proc伪文件系统的接口,通常挂载为/proc
。从长远来看,这个crate旨在功能完整,但目前并非所有文件都公开。请参阅文档以获取支持信息,或查看代码仓库中的support.md文件。
示例
在文档和代码仓库的examples文件夹中提供了几个示例。
以下是一个示例,它打印出与调用进程相同的tty上运行的进程。这与“ps”在默认模式下的行为非常相似。
fn main() {
let me = procfs::process::Process::myself().unwrap();
let me_stat = me.stat().unwrap();
let tps = procfs::ticks_per_second().unwrap();
println!("{: >5} {: <8} {: >8} {}", "PID", "TTY", "TIME", "CMD");
let tty = format!("pty/{}", me_stat.tty_nr().1);
for prc in procfs::process::all_processes().unwrap() {
let prc = prc.unwrap();
let stat = prc.stat().unwrap();
if stat.tty_nr == me_stat.tty_nr {
// total_time is in seconds
let total_time =
(stat.utime + stat.stime) as f32 / (tps as f32);
println!(
"{: >5} {: <8} {: >8} {}",
stat.pid, tty, total_time, stat.comm
);
}
}
}
以下是一个示例,展示了如何获取当前进程的当前内存使用情况。
use procfs::process::Process;
fn main() {
let me = Process::myself().unwrap();
let me_stat = me.stat().unwrap();
println!("PID: {}", me.pid);
let page_size = procfs::page_size();
println!("Memory page size: {}", page_size);
println!("== Data from /proc/self/stat:");
println!("Total virtual memory used: {} bytes", me_stat.vsize);
println!(
"Total resident set: {} pages ({} bytes)",
me_stat.rss,
me_stat.rss * page_size
);
}
获取这些数据有几种方法,因此也可以查看代码仓库中更详细的self_memory示例。
Cargo功能
以下是一些可用的Cargo功能:
chrono
-- 默认。可选。此功能启用了一些返回值为DateTime
对象的函数。flate2
-- 默认。可选。此功能启用通过procfs::kernel_config
方法解析gzip压缩的/proc/config.gz
文件。backtrace
-- 可选。此功能在抛出InternalError
时提供堆栈跟踪。serde1
-- 可选。此功能允许使用serde 1.0将大多数结构体序列化和反序列化。注意,此功能需要比1.48.0(procfs的MSRV)更新的rust版本。确切版本未在此处指定,因为serde没有MSRV策略。
最低Rust版本
此crate仅针对最新的稳定rustc编译器进行了测试,但可能与旧编译器兼容。有关详细信息,请参阅msrv.md。
许可证
procfs库根据以下任一许可证授权:
- Apache许可证,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
有关文档的附加版权信息,请参阅COPYRIGHT.txt文件。
贡献
欢迎贡献,特别是在文档和旧内核测试方面。
除非您明确表示否则,您根据Apache-2.0许可证提交的任何有意包含在作品中的贡献,将如上所述双重授权,不附加任何额外条款或条件。
依赖关系
~1.2–7.5MB
~41K SLoC