49个版本

0.16.0 2023年10月29日
0.16.0-RC12023年6月21日
0.15.1 2023年2月18日
0.14.2 2022年12月4日
0.3.0 2018年7月29日

#4 in Unix API

Download history 199404/week @ 2024-05-01 201786/week @ 2024-05-08 204589/week @ 2024-05-15 207095/week @ 2024-05-22 235242/week @ 2024-05-29 203763/week @ 2024-06-05 209424/week @ 2024-06-12 209893/week @ 2024-06-19 228576/week @ 2024-06-26 205738/week @ 2024-07-03 235463/week @ 2024-07-10 243171/week @ 2024-07-17 267887/week @ 2024-07-24 229923/week @ 2024-07-31 252288/week @ 2024-08-07 231344/week @ 2024-08-14

1,033,230 monthly downloads
用于 273 个crate (95 直接)

MIT/Apache

480KB
9K SLoC

procfs

Crate Docs Minimum rustc version

此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库的许可证为以下之一:

供您选择。

有关文档的额外版权信息,请参阅COPYRIGHT.txt文件。

贡献

欢迎贡献,特别是在文档和旧内核测试方面。

除非您明确表示,否则根据Apache-2.0许可证定义的您有意提交以包含在本作品中的任何贡献,均应按上述方式双重许可,不附加任何额外条款或条件。

依赖关系

~3–12MB
~151K SLoC