sysutils: basic ps utility
This commit is contained in:
parent
1b2b41406a
commit
6f8fce3388
@ -133,6 +133,10 @@ path = "src/sleep.rs"
|
||||
name = "lspci"
|
||||
path = "src/lspci.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "ps"
|
||||
path = "src/ps.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "tst"
|
||||
path = "src/tst.rs"
|
||||
|
60
userspace/sysutils/src/ps.rs
Normal file
60
userspace/sysutils/src/ps.rs
Normal file
@ -0,0 +1,60 @@
|
||||
use std::{fs, io, path::PathBuf, process::ExitCode};
|
||||
|
||||
#[derive(Debug)]
|
||||
struct ProcessInfo {
|
||||
pid: u32,
|
||||
name: String,
|
||||
}
|
||||
|
||||
fn list_processes() -> io::Result<Vec<u32>> {
|
||||
let mut list = vec![];
|
||||
for entry in fs::read_dir("/sys/proc")? {
|
||||
let Ok(entry) = entry else {
|
||||
continue;
|
||||
};
|
||||
let filename = entry.file_name();
|
||||
let Some(name) = filename.to_str() else {
|
||||
continue;
|
||||
};
|
||||
let Ok(pid) = name.parse() else {
|
||||
continue;
|
||||
};
|
||||
list.push(pid);
|
||||
}
|
||||
Ok(list)
|
||||
}
|
||||
|
||||
fn process_info(pid: u32) -> io::Result<ProcessInfo> {
|
||||
let base = PathBuf::from("/sys/proc").join(format!("{pid}"));
|
||||
let name = fs::read_to_string(base.join("name"))?;
|
||||
Ok(ProcessInfo { pid, name })
|
||||
}
|
||||
|
||||
fn processes() -> io::Result<Vec<ProcessInfo>> {
|
||||
let pids = list_processes()?;
|
||||
let processes = pids
|
||||
.into_iter()
|
||||
.filter_map(|pid| process_info(pid).ok())
|
||||
.collect();
|
||||
Ok(processes)
|
||||
}
|
||||
|
||||
fn run() -> io::Result<()> {
|
||||
let mut processes = processes()?;
|
||||
processes.sort_by(|a, b| Ord::cmp(&a.pid, &b.pid));
|
||||
println!("{:>4} NAME", "PID");
|
||||
for process in processes {
|
||||
println!("{:4} {}", process.pid, process.name.trim());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> ExitCode {
|
||||
match run() {
|
||||
Ok(()) => ExitCode::SUCCESS,
|
||||
Err(error) => {
|
||||
eprintln!("{error}");
|
||||
ExitCode::FAILURE
|
||||
}
|
||||
}
|
||||
}
|
@ -48,6 +48,7 @@ const PROGRAMS: &[(&str, &str)] = &[
|
||||
("sync", "bin/sync"),
|
||||
("sleep", "bin/sleep"),
|
||||
("lspci", "bin/lspci"),
|
||||
("ps", "bin/ps"),
|
||||
("tst", "bin/tst"),
|
||||
// netutils
|
||||
("netconf", "sbin/netconf"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user