49个版本
0.16.0 | 2023年10月29日 |
---|---|
0.16.0-RC1 | 2023年6月21日 |
0.15.1 | 2023年2月18日 |
0.14.2 | 2022年12月4日 |
0.3.0 | 2018年7月29日 |
#4 in Unix API
1,033,230 monthly downloads
用于 273 个crate (95 直接)
480KB
9K SLoC
procfs
此crate是Linux上proc伪文件系统的接口,通常挂载为/proc
。长期目标是功能较为完整,但目前并非所有文件都已公开。请参阅文档了解支持的内容,或查看代码仓库中的support.md文件。
示例
在文档和代码仓库的示例文件夹中有几个示例。
以下是一个示例,它将打印出与调用进程相同的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版本
此软件包仅针对最新稳定版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许可证定义的您有意提交以包含在本作品中的任何贡献,均应按上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~3–12MB
~151K SLoC