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 itertools::Itertools;
|
||||||
use processes::{terminate_process, ProcessInfo};
|
use processes::{terminate_process, ProcessInfo};
|
||||||
use std::collections::HashMap;
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::process::ExitCode;
|
use std::process::ExitCode;
|
||||||
use std::{env, fmt::Display};
|
use std::{env, fmt::Display};
|
||||||
|
|
||||||
@ -18,11 +18,6 @@ enum Mode {
|
|||||||
Help,
|
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 {
|
fn main() -> ExitCode {
|
||||||
match parse_mode() {
|
match parse_mode() {
|
||||||
Mode::All => {
|
Mode::All => {
|
||||||
@ -30,7 +25,11 @@ fn main() -> ExitCode {
|
|||||||
ExitCode::SUCCESS
|
ExitCode::SUCCESS
|
||||||
}
|
}
|
||||||
Mode::Tree => {
|
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
|
ExitCode::SUCCESS
|
||||||
}
|
}
|
||||||
Mode::Minimal => {
|
Mode::Minimal => {
|
||||||
@ -38,6 +37,8 @@ fn main() -> ExitCode {
|
|||||||
"svchost",
|
"svchost",
|
||||||
"registry",
|
"registry",
|
||||||
"[system process]",
|
"[system process]",
|
||||||
|
"system",
|
||||||
|
"memory compression",
|
||||||
"smss.exe",
|
"smss.exe",
|
||||||
"csrss.exe",
|
"csrss.exe",
|
||||||
"lsass.exe",
|
"lsass.exe",
|
||||||
@ -55,11 +56,24 @@ fn main() -> ExitCode {
|
|||||||
ExitCode::SUCCESS
|
ExitCode::SUCCESS
|
||||||
}
|
}
|
||||||
Mode::Filtered(filter) => {
|
Mode::Filtered(filter) => {
|
||||||
show_processes_table(
|
let all_processes = processes::list_processes();
|
||||||
processes::list_processes()
|
let filtered_pids: HashSet<u32> = all_processes
|
||||||
.iter()
|
.clone()
|
||||||
.filter(|p| p.name.to_ascii_lowercase().contains(&filter))
|
.into_iter()
|
||||||
.sorted_by_key(|p| &p.name),
|
.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
|
ExitCode::SUCCESS
|
||||||
}
|
}
|
||||||
@ -145,12 +159,7 @@ fn parse_mode() -> Mode {
|
|||||||
mode
|
mode
|
||||||
}
|
}
|
||||||
|
|
||||||
fn show_processes_tree() {
|
fn show_processes_tree(processes: Vec<ProcessInfo>) {
|
||||||
let processes: Vec<ProcessInfo> = processes::list_processes()
|
|
||||||
.into_iter()
|
|
||||||
.sorted_by_key(|p| p.parent_pid)
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
let by_pid: HashMap<u32, ProcessInfo> =
|
let by_pid: HashMap<u32, ProcessInfo> =
|
||||||
processes.clone().into_iter().map(|p| (p.pid, p)).collect();
|
processes.clone().into_iter().map(|p| (p.pid, p)).collect();
|
||||||
let mut tree: HashMap<u32, Vec<ProcessInfo>> = HashMap::new();
|
let mut tree: HashMap<u32, Vec<ProcessInfo>> = HashMap::new();
|
||||||
|
Loading…
Reference in New Issue
Block a user