24 unstable releases (6 breaking)

✓ Uses Rust 2018 edition

0.7.5 Dec 5, 2019
0.7.4 Nov 25, 2019
0.7.1 Oct 31, 2019
0.5.3 Jun 10, 2019
0.3.0 Jul 29, 2018

#11 in Unix APIs

Download history 410/week @ 2019-08-22 228/week @ 2019-08-29 184/week @ 2019-09-05 160/week @ 2019-09-12 294/week @ 2019-09-19 97/week @ 2019-09-26 300/week @ 2019-10-03 326/week @ 2019-10-10 671/week @ 2019-10-17 756/week @ 2019-10-24 781/week @ 2019-10-31 767/week @ 2019-11-07 913/week @ 2019-11-14 1052/week @ 2019-11-21 964/week @ 2019-11-28

2,468 downloads per month
Used in 4 crates

MIT/Apache

220KB
4K SLoC

procfs

Crate Docs Minimum rustc version

This crate is an interface to the proc pseudo-filesystem on linux, which is normally mounted as /proc. Long-term, this crate aims to be fairly feature complete, but at the moment not all files are exposed. See the docs for info on what's supported.

Examples

There are several examples in the docs and in the examples folder of the code repository.

Here's a small example that prints out all processes that are running on the same tty as the calling process. This is very similar to what "ps" does in its default mode:

fn main() {
    let me = procfs::Process::myself().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::all_processes() {
        if prc.stat.tty_nr == me.stat.tty_nr {
            // total_time is in seconds
            let total_time =
                (prc.stat.utime + prc.stat.stime) as f32 / (tps as f32);
            println!(
                "{: >5} {: <8} {: >8} {}",
                prc.stat.pid, tty, total_time, prc.stat.comm
            );
        }
    }
}

Here's another example that shows how to get the current memory usage of the current process:

use procfs::process::Process;

fn main() {
    let me = Process::myself().unwrap();
    println!("PID: {}", me.pid);

    let page_size = procfs::page_size().unwrap() as u64;
    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 as u64 * page_size);
}

There are a few ways to get this data, so also checkout the longer self_memory example for more details.

Cargo features

The following cargo features are available:

  • chrono -- Default. Optional. This feature enables a few methods that return values as DateTime objects.
  • backtrace -- Optional. This feature lets you get a stack trace whenever an InternalError is raised.

Minimum Rust Version

This crate requires a minimum rust version of 1.33.0 (2019-02-28)

License

The procfs library is licensed under either of

at your option.

For additional copyright information regarding documetnation, please also see the COPYRIGHT.txt file.

Contribution

Contriutions are welcome, especially in the areas of documentation and testing on older kernels.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.5MB
~19K SLoC