This library lets you a fully interface procps
, which provides an API for Linux' /proc
filesystem.
You can find it on crates.io.
sudo apt-get install libprocps4-dev
```rust extern crate procpssys; use procpssys::readproc::{openproc, readproc, closeproc, proct}; use std::ffi::CStr; use std::ptr::nullmut;
fn main() { unsafe { // intialize query for process list let proctab = openproc(/* fills cmdline line attribute */ procpssys::readproc::PROCFILLCOM);
// go through all processes
let mut procinfo = proc_t::default();
while readproc(proctab, &mut procinfo) != null_mut() {
// read cmdline attribute
let cmdline = if procinfo.cmdline == null_mut() {
"".to_string()
} else {
CStr::from_ptr(*procinfo.cmdline)
.to_string_lossy()
.into_owned()
};
// print information
println!("pid: {} cmdline: \"{}\"", procinfo.tid, cmdline);
}
closeproc(proctab);
}
} ```
```c
int main(int argc, char **argv) {
PROCTAB *proc = openproc(PROCFILLMEM | PROCFILLSTAT | PROCFILLSTATUS | PROCFILLCOM); proct *procinfo;
while ((procinfo = readproc(proc, NULL)) != NULL) { if (procinfo->cmdline != NULL) { printf("%20s:\t%5ld\t%5lld\t%5lld\t%20s\n", procinfo->cmd, procinfo->resident, procinfo->utime, procinfo->stime, procinfo->cmdline[0]); freeproc(procinfo); } }
closeproc(proc); } ```