fix(performance): only refresh relevant prorcess in sysinfo when serializing sessions (#2920)

* optimize: update refresh prorcess for sysinfo to reduce cpu usage

* fix: fix format

Signed-off-by: xuanyuan300 <xuanyuan300@gmail.com>

---------

Signed-off-by: xuanyuan300 <xuanyuan300@gmail.com>
This commit is contained in:
pierce 2023-11-09 16:41:01 +08:00 committed by GitHub
parent a553188601
commit c325eb3af9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -756,20 +756,24 @@ impl ServerOsApi for ServerOsInputOutput {
fn get_cwds(&self, pids: Vec<Pid>) -> HashMap<Pid, PathBuf> {
let mut system_info = System::new();
// Update by minimizing information.
// See https://docs.rs/sysinfo/0.22.5/sysinfo/struct.ProcessRefreshKind.html#
system_info.refresh_processes_specifics(ProcessRefreshKind::default());
let mut cwds = HashMap::new();
for pid in pids {
if let Some(process) = system_info.process(pid.into()) {
let cwd = process.cwd();
let cwd_is_empty = cwd.iter().next().is_none();
if !cwd_is_empty {
cwds.insert(pid, process.cwd().to_path_buf());
// Update by minimizing information.
// See https://docs.rs/sysinfo/0.22.5/sysinfo/struct.ProcessRefreshKind.html#
let is_found =
system_info.refresh_process_specifics(pid.into(), ProcessRefreshKind::default());
if is_found {
if let Some(process) = system_info.process(pid.into()) {
let cwd = process.cwd();
let cwd_is_empty = cwd.iter().next().is_none();
if !cwd_is_empty {
cwds.insert(pid, process.cwd().to_path_buf());
}
}
}
}
cwds
}
fn get_all_cmds_by_ppid(&self) -> HashMap<String, Vec<String>> {