Expand description

Functions and structs related to process information

The primary source of data for functions in this module is the files in a /proc/<pid>/ directory. If you have a process ID, you can use Process::new(pid), otherwise you can get a list of all running processes using all_processes().

In case you have procfs filesystem mounted to a location other than /proc, use Process::new_with_root().

Examples

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. You can run this example yourself with:

cargo run –example=ps

let me = procfs::process::Process::myself().unwrap();
let me_stat = me.stat().unwrap();
let tps = procfs::ticks_per_second().unwrap();

println!("{: >10} {: <8} {: >8} {}", "PID", "TTY", "TIME", "CMD");

let tty = format!("pty/{}", me_stat.tty_nr().1);
for prc in procfs::process::all_processes().unwrap() {
    if let Ok(stat) = prc.unwrap().stat() {
        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!(
                "{: >10} {: <8} {: >8} {}",
                stat.pid, tty, total_time, stat.comm
            );
        }
    }
}

Here’s a simple example of how you could get the total memory used by the current process. There are several ways to do this. For a longer example, see the examples/self_memory.rs file in the git repository. You can run this example with:

cargo run –example=self_memory

let me = Process::myself().unwrap();
let me_stat = me.stat().unwrap();
let page_size = procfs::page_size().unwrap() as u64;

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);

Structs

See the Process::fd() method

The mode (read/write permissions) for an open file descriptor

The result of Process::fd, iterates over all fds in a process

This struct contains I/O statistics for the process, built from /proc/<pid>/io

Process limits

Represents an entry in a /proc/<pid>/maps file.

Represents the information about a specific mapping as presented in /proc//smaps

Represents the fields and flags in a page table entry for a memory page.

Information about a specific mount in a process’s mount namespace.

Only NFS mounts provide additional statistics in MountStat entries.

Mount information from /proc/<pid>/mountstats.

Represents NFS data from /proc/<pid>/mountstats under the section bytes.

Represents NFS data from /proc/<pid>/mountstats under the section events.

Represents NFS data from /proc/<pid>/mountstats under the section of per-op statistics.

Information about a namespace

Parses page table entries accessing /proc/<pid>/pagemap.

Represents a process in /proc/<pid>.

Provides scheduler statistics of the process, based on the /proc/<pid>/schedstat file.

Status information about the process, based on the /proc/<pid>/stat file.

Kernel flags for a process

Provides information about memory usage, measured in pages.

Status information about the process, based on the /proc/<pid>/status file.

Represents the fields and flags in a page table entry for a swapped page.

A task (aka Thread) inside of a Process

The result of Process::tasks, iterates over all tasks in a process

Represents the kernel flags associated with the virtual memory area. The names of these flags are just those you’ll find in the man page, but in upper case.

Enums

Describes a file descriptor opened by a process.

Optional fields used in MountInfo

Represents a page table entry in /proc/<pid>/pagemap.

Represents the state of a process.

Functions

Return a iterator of all processes

Return a list of all processes based on a specified /proc path

Type Definitions