This is a library for getting information about running processes for Mac OS X and Linux.
``` extern crate libproc; use libproc::libproc::proc_pid;
...
match proc_pid::pidpath(pid) { Ok(path) => { println!("PID {}: has path {}", pid, path); }, Err(err) => writeln!(&mut std::io::stderr(), "Error: {}", err).unwrap() } ```
Run "cargo doc" and then open "./target/doc/libproc/index.html". More documentation will be added over time.
At the moment these methods have been implemented:
pub fn listpids(proc_types: ProcType) -> Result<Vec<u32>, String> (macos) (linux)
pub fn pidinfo<T: PIDInfo>(pid : i32, arg: u64) -> Result<T, String> (macos)
pub fn regionfilename(pid: i32, address: u64) -> Result<String, String> (macos)
pub fn pidpath(pid : i32) -> Result<String, String> (macos) (linux)
pub fn libversion() -> Result<(i32, i32), String> (macos)
pub fn name(pid: i32) -> Result<String, String> (linux) (macos)
pub fn listpidinfo<T: ListPIDInfo>(pid : i32, max_len: usize) -> Result<Vec<T::Item>, String> (macos)
pub fn pidcwd(pid: pid_t) -> Result<PathBuf, String> (linux)
pub fn cwdself() -> Result<PathBuf, String> (linux)
pub fn pidfdinfo<T: PIDFDInfo>(pid : i32, fd: i32) -> Result<T, String> (macos)
pub fn pidrusage<T: PIDRUsage>(pid : i32) -> Result<T, String> (macos)
I have also implemented this method - but the MAGIC_NUMBER returned is not correct, and upon investigation it seems that Apple/Darwin/Mach have changed totally how dmessage works in latest versions, moving away from using libproc to use kvm - with a total rewrite of dmesg.
I leave it in for now, but some serious revision of the library, with conditional compilation depending on which version of Mac OS X and/or Darwin will be required to get a version that works broadly :-(
See Github issue
pub fn kmsgbuf() -> Result<String, String>
cargo build
builds the following binaries:
- procinfo
that takes a PID as an optional argument (uses it's own pid if none supplied) and returns information about the process on stdout
- dmesg
is a version of dmesg implemented in rust that uses libproc-rs. This must be run as root. Currently fails (see above and
bug).
Mac OS X and work started on Linux.
cargo test
should build and test as usual for rust projects.
However, as some functions need to be run as root
to work, I run travis-CI tests as root
. So, when developing in local
it's best if you use sudo cargo test
. NOTE: This can get you into permissions problems when switching back and for
between using cargo test
and sudo cargo test
. To fix that run sudo cargo clean
and then build or test as you prefer.
In order to have tests pass when run as root
or not, some tests need to check if they are root
at run-time
(using our own am_root()
function is handy) and avoid failing if not run as root
.
See the list of issues. I put the "help wanted" label where I need help from others.
This code is licensed under MIT license (see LICENCE).
You are welcome to fork this repo and make a pull request, or write an issue.