Show found processes as tree in Filtered mode
This commit is contained in:
parent
63c21f929f
commit
b0814b8a83
45
src/main.rs
45
src/main.rs
@ -1,6 +1,6 @@
|
||||
use itertools::Itertools;
|
||||
use processes::{terminate_process, ProcessInfo};
|
||||
use std::collections::HashMap;
|
||||
use std::collections::{HashMap, HashSet};
|
||||
use std::process::ExitCode;
|
||||
use std::{env, fmt::Display};
|
||||
|
||||
@ -18,11 +18,6 @@ enum Mode {
|
||||
Help,
|
||||
}
|
||||
|
||||
// pkill => all unique processed, excl. svchost
|
||||
// pkill --all => all processes, incl. svchost
|
||||
// pkill <regex> => filtered processes
|
||||
// pkill --pid name => PID of the first occurence
|
||||
// pkill --kill PID/name => terminate process by its PID or name
|
||||
fn main() -> ExitCode {
|
||||
match parse_mode() {
|
||||
Mode::All => {
|
||||
@ -30,7 +25,11 @@ fn main() -> ExitCode {
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
Mode::Tree => {
|
||||
show_processes_tree();
|
||||
let processes: Vec<ProcessInfo> = processes::list_processes()
|
||||
.into_iter()
|
||||
.sorted_by_key(|p| p.parent_pid)
|
||||
.collect();
|
||||
show_processes_tree(processes);
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
Mode::Minimal => {
|
||||
@ -38,6 +37,8 @@ fn main() -> ExitCode {
|
||||
"svchost",
|
||||
"registry",
|
||||
"[system process]",
|
||||
"system",
|
||||
"memory compression",
|
||||
"smss.exe",
|
||||
"csrss.exe",
|
||||
"lsass.exe",
|
||||
@ -55,11 +56,24 @@ fn main() -> ExitCode {
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
Mode::Filtered(filter) => {
|
||||
show_processes_table(
|
||||
processes::list_processes()
|
||||
.iter()
|
||||
.filter(|p| p.name.to_ascii_lowercase().contains(&filter))
|
||||
.sorted_by_key(|p| &p.name),
|
||||
let all_processes = processes::list_processes();
|
||||
let filtered_pids: HashSet<u32> = all_processes
|
||||
.clone()
|
||||
.into_iter()
|
||||
.flat_map(|p| {
|
||||
if p.name.to_ascii_lowercase().contains(&filter) {
|
||||
vec![p.pid, p.parent_pid]
|
||||
} else {
|
||||
vec![]
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
show_processes_tree(
|
||||
all_processes
|
||||
.into_iter()
|
||||
.filter(|p| filtered_pids.contains(&p.pid))
|
||||
.sorted_by_key(|p| p.name.clone())
|
||||
.collect(),
|
||||
);
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
@ -145,12 +159,7 @@ fn parse_mode() -> Mode {
|
||||
mode
|
||||
}
|
||||
|
||||
fn show_processes_tree() {
|
||||
let processes: Vec<ProcessInfo> = processes::list_processes()
|
||||
.into_iter()
|
||||
.sorted_by_key(|p| p.parent_pid)
|
||||
.collect();
|
||||
|
||||
fn show_processes_tree(processes: Vec<ProcessInfo>) {
|
||||
let by_pid: HashMap<u32, ProcessInfo> =
|
||||
processes.clone().into_iter().map(|p| (p.pid, p)).collect();
|
||||
let mut tree: HashMap<u32, Vec<ProcessInfo>> = HashMap::new();
|
||||
|
Loading…
Reference in New Issue
Block a user