Comments (7)
Hum, seems weird but I'll check this evening. Thanks!
from sysinfo.
get_process_list()
can be easier and more efficient by changing Process::task
from HashMap<pid_t, Process>
to Vec<pid_t>
.
Also the field Process::pid
is duplication, the value is already in the HashMap
key.
from sysinfo.
A duplication of 4 bytes, so not a big deal. Also, it's way more efficient to search into a HashMap
than into a Vec
.
from sysinfo.
Also, in your current code, you're not really checking process hierarchy. The tasks are threads, not processes. In addition, in the first step you put None
but all the processes ahve at least the process 1 as parent. Try with the following code:
fn check() {
fn check_process_hierarchy(parent: Option<pid_t>, processes: &HashMap<pid_t,Process>) {
for (pid, process) in processes {
assert_eq!(process.pid, *pid);
if !parent.is_none() {
assert_eq!(process.parent, parent);
}
check_process_hierarchy(Some(*pid), &process.tasks);
}
}
let mut sysinfo = System::new();
sysinfo.refresh_processes();
check_process_hierarchy(None, sysinfo.get_process_list());
}
from sysinfo.
it's way more efficient to search into a HashMap than into a Vec.
Yes, so if you want to know the parent of a process, you look up the process in the HashMap of all processes and tasks and get the parent
property. If you want to know properties of the tasks, you take their pids from the tasks
vector.
all the processes ahve at least the process 1 as parent.
Process 1 (init system, e.g. systemd) and 2 (kthreadd) have no parent. So Option<pid_t>
for parent is fine. All other processes and threads have parents.
I expected that list_process would give me only the top processes (1 and 2), but now I understand that it's all processes and that tasks are threads. The fact that tasks have type Process is confusing.
from sysinfo.
The adapted check passes.
from sysinfo.
It's a trick, but since tasks are just like processes, I used the same struct. I should maybe state it more strongly in the docs...
from sysinfo.
Related Issues (20)
- sunxi-therm_temp1 temperature in wrong scale HOT 4
- Sysinfo causing program to crash on m1 mac HOT 2
- Physical memory larger than virtual memory on Windows HOT 4
- global_cpu_info().brand() returning M1 instead of Intel on Intel based Macs HOT 2
- Drop once_cell dependency once MSRV can be bumped to 1.70 HOT 1
- Free memory is wrong on Linux with gcroups v2 HOT 10
- Hot plug support HOT 3
- incorrect process cpu usage? HOT 12
- can not get cpu usage in mac os 14.4 (23E214) HOT 1
- Unable to Retrieve User Groups on Windows HOT 1
- Remove `new_all` methods
- Println not working after refresh_cpu() HOT 3
- Temperatures on Linux unavailable HOT 1
- Is it possible to add volume_serial_number to the disk?
- the process API on macOS can returned non UTF-8 String HOT 8
- Add memory frequency, type, and slot information HOT 1
- Only store CPU usage for global CPU and no other information HOT 1
- Return std::result HOT 4
- Add `serde::Serialize` for all the output types HOT 1
- Process priority/affinity support HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sysinfo.