mirror of
https://github.com/ClementTsang/bottom
synced 2025-02-16 21:28:26 +00:00
Fix processes in windows
This commit is contained in:
parent
ff43c467e4
commit
98ccc70743
4 changed files with 50 additions and 35 deletions
|
@ -112,8 +112,8 @@ impl App {
|
|||
if self.awaiting_second_char && self.second_char == 'd' {
|
||||
self.awaiting_second_char = false;
|
||||
self.second_char = ' ';
|
||||
// TODO: Redo this in DD rewrite!
|
||||
//self.kill_highlighted_process().unwrap_or(());
|
||||
// TODO: Redo this in DD rewrite!
|
||||
self.kill_highlighted_process().unwrap_or(());
|
||||
} else {
|
||||
self.awaiting_second_char = true;
|
||||
self.second_char = 'd';
|
||||
|
@ -188,9 +188,9 @@ impl App {
|
|||
}
|
||||
}
|
||||
|
||||
fn _kill_highlighted_process(&self) -> crate::utils::error::Result<()> {
|
||||
fn kill_highlighted_process(&self) -> crate::utils::error::Result<()> {
|
||||
let current_pid = u64::from(self.data.list_of_processes[self.currently_selected_process_position as usize].pid);
|
||||
process_killer::_kill_process_given_pid(current_pid)?;
|
||||
process_killer::kill_process_given_pid(current_pid)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -192,13 +192,32 @@ pub fn get_sorted_processes_list(
|
|||
}
|
||||
}
|
||||
} else {
|
||||
// Windows et al.
|
||||
|
||||
let process_hashmap = sys.get_process_list();
|
||||
for process_val in process_hashmap.values() {
|
||||
let command_name = if process_val.name().is_empty() {
|
||||
let process_cmd = process_val.cmd();
|
||||
if process_cmd.len() > 1 {
|
||||
process_cmd[0].clone()
|
||||
} else {
|
||||
let process_exe = process_val.exe().file_stem();
|
||||
if let Some(exe) = process_exe {
|
||||
let process_exe_opt = exe.to_str();
|
||||
if let Some(exe_name) = process_exe_opt {
|
||||
exe_name.to_string()
|
||||
} else {
|
||||
"".to_string()
|
||||
}
|
||||
} else {
|
||||
"".to_string()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
process_val.name().to_string()
|
||||
};
|
||||
|
||||
process_vector.push(ProcessData {
|
||||
pid: process_val.pid() as u32,
|
||||
command: process_val.name().to_string(),
|
||||
command: command_name,
|
||||
mem_usage_percent: None,
|
||||
mem_usage_kb: Some(process_val.memory()),
|
||||
cpu_usage_percent: f64::from(process_val.cpu_usage()),
|
||||
|
|
|
@ -33,7 +33,7 @@ impl Process {
|
|||
}
|
||||
|
||||
/// Kills a process, given a PID.
|
||||
pub fn _kill_process_given_pid(pid: u64) -> crate::utils::error::Result<()> {
|
||||
pub fn kill_process_given_pid(pid: u64) -> crate::utils::error::Result<()> {
|
||||
if cfg!(target_os = "linux") {
|
||||
// Linux
|
||||
Command::new("kill").arg(pid.to_string()).output()?;
|
||||
|
|
|
@ -30,37 +30,33 @@ pub fn update_temp_row(app_data: &data_collection::Data, temp_type: &data_collec
|
|||
pub fn update_disk_row(app_data: &data_collection::Data) -> Vec<Vec<String>> {
|
||||
let mut disk_vector: Vec<Vec<String>> = Vec::new();
|
||||
for disk in &app_data.list_of_disks {
|
||||
let io_activity = if app_data.list_of_io.len() > 2 {
|
||||
if let Some(io_package) = &app_data.list_of_io.last() {
|
||||
if let Some(trimmed_mount) = disk.name.to_string().split('/').last() {
|
||||
let prev_io_package = &app_data.list_of_io[app_data.list_of_io.len() - 2];
|
||||
let io_activity = {
|
||||
let mut final_result = ("0B/s".to_string(), "0B/s".to_string());
|
||||
if app_data.list_of_io.len() > 2 {
|
||||
if let Some(io_package) = &app_data.list_of_io.last() {
|
||||
if let Some(trimmed_mount) = disk.name.to_string().split('/').last() {
|
||||
let prev_io_package = &app_data.list_of_io[app_data.list_of_io.len() - 2];
|
||||
|
||||
let io_hashmap = &io_package.io_hash;
|
||||
let prev_io_hashmap = &prev_io_package.io_hash;
|
||||
let time_difference = io_package.instant.duration_since(prev_io_package.instant).as_secs_f64();
|
||||
if io_hashmap.contains_key(trimmed_mount) && prev_io_hashmap.contains_key(trimmed_mount) {
|
||||
// Ideally change this...
|
||||
let ele = &io_hashmap[trimmed_mount];
|
||||
let prev = &prev_io_hashmap[trimmed_mount];
|
||||
let read_bytes_per_sec = ((ele.read_bytes - prev.read_bytes) as f64 / time_difference) as u64;
|
||||
let write_bytes_per_sec = ((ele.write_bytes - prev.write_bytes) as f64 / time_difference) as u64;
|
||||
let converted_read = get_simple_byte_values(read_bytes_per_sec, false);
|
||||
let converted_write = get_simple_byte_values(write_bytes_per_sec, false);
|
||||
(
|
||||
format!("{:.*}{}/s", 0, converted_read.0, converted_read.1),
|
||||
format!("{:.*}{}/s", 0, converted_write.0, converted_write.1),
|
||||
)
|
||||
} else {
|
||||
("0B/s".to_string(), "0B/s".to_string())
|
||||
let io_hashmap = &io_package.io_hash;
|
||||
let prev_io_hashmap = &prev_io_package.io_hash;
|
||||
let time_difference = io_package.instant.duration_since(prev_io_package.instant).as_secs_f64();
|
||||
if io_hashmap.contains_key(trimmed_mount) && prev_io_hashmap.contains_key(trimmed_mount) {
|
||||
// Ideally change this...
|
||||
let ele = &io_hashmap[trimmed_mount];
|
||||
let prev = &prev_io_hashmap[trimmed_mount];
|
||||
let read_bytes_per_sec = ((ele.read_bytes - prev.read_bytes) as f64 / time_difference) as u64;
|
||||
let write_bytes_per_sec = ((ele.write_bytes - prev.write_bytes) as f64 / time_difference) as u64;
|
||||
let converted_read = get_simple_byte_values(read_bytes_per_sec, false);
|
||||
let converted_write = get_simple_byte_values(write_bytes_per_sec, false);
|
||||
final_result = (
|
||||
format!("{:.*}{}/s", 0, converted_read.0, converted_read.1),
|
||||
format!("{:.*}{}/s", 0, converted_write.0, converted_write.1),
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
("0B/s".to_string(), "0B/s".to_string())
|
||||
}
|
||||
} else {
|
||||
("0B/s".to_string(), "0B/s".to_string())
|
||||
}
|
||||
} else {
|
||||
("0B/s".to_string(), "0B/s".to_string())
|
||||
final_result
|
||||
};
|
||||
|
||||
let converted_free_space = get_simple_byte_values(disk.free_space, false);
|
||||
|
|
Loading…
Add table
Reference in a new issue