Project is developed on and requires 64bit FreeBSD-11-compliant systems.
Daniel (@dmilith) Dettlaff
-
HardenedBSD +11-STABLE (or FreeBSD),
-
Rust (Cargo)
-
Kernel Memory Interface system feature: "kvm" (for details:
man kvmon supported OS) -
Process Information system library: "procstat" (for details:
man procstaton supported OS)
The library provides a functional-style API that returns structured data:
-
pub fn get_process_usage(uid: uid_t) -> Result<ProcessListResponse<ProcessInfo>, String>- returns detailed information about all processes for a given UID, including open sockets, TCP/UDP connections, bound addresses, and protocols. -
pub fn get_process_usage_short(uid: uid_t) -> Result<ProcessListResponse<ProcessInfoShort>, String>- returns a simplified list of process information.
- Idiomatic Rust: Leverages functional programming patterns (iterators, closures) for safety and immutability.
- Enhanced Protocol Support: Supports a wide range of address families including:
AF_INET,AF_INET6,AF_LOCALAF_LINK,AF_ARP,AF_ROUTEAF_NETGRAPH,AF_BLUETOOTH,AF_NETLINK(Value 38)AF_IPX,AF_APPLETALK,AF_ATM,AF_SNA,AF_ISDN,AF_NATMSDP4(40) andSDP6(42)
- JSON Ready: All response structures derive
Serializefor easy integration with web services or CLI tools viaserde_json.
use kvmpro::{get_process_usage_short, get_process_usage};
let uid = 1001;
match get_process_usage(uid) {
Ok(resp) => {
println!("Status: {}", resp.status);
for proc in resp.list {
println!("PID: {}, CMD: {}, Sockets: {}", proc.pid, proc.cmd, proc.stat_info);
}
}
Err(e) => eprintln!("Error fetching process data: {}", e),
}The project utilizes standard cargo workflows:
cargo build --release
cargo testLegacy wrapper scripts are also provided in the bin/ directory for convenience:
bin/build: Runscargo build --release.bin/test: Runscargo test -- --nocapture.bin/clean: Runscargo clean.