mirror of
https://github.com/RGBCube/serenity
synced 2025-05-22 19:35:06 +00:00
Kernel: Expose per-thread information in /proc/all
Previously it was not possible to see what each thread in a process was up to, or how much CPU it was consuming. This patch fixes that. SystemMonitor and "top" now show threads instead of just processes. "ps" is gonna need some more fixing, but it at least builds for now. Fixes #66.
This commit is contained in:
parent
86a9a52355
commit
712ae73581
9 changed files with 243 additions and 123 deletions
|
@ -26,13 +26,11 @@ HashMap<pid_t, CProcessStatistics> CProcessStatisticsReader::get_all()
|
|||
|
||||
// kernel data first
|
||||
process.pid = process_object.get("pid").to_u32();
|
||||
process.times_scheduled = process_object.get("times_scheduled").to_u32();
|
||||
process.pgid = process_object.get("pgid").to_u32();
|
||||
process.pgp = process_object.get("pgp").to_u32();
|
||||
process.sid = process_object.get("sid").to_u32();
|
||||
process.uid = process_object.get("uid").to_u32();
|
||||
process.gid = process_object.get("gid").to_u32();
|
||||
process.state = process_object.get("state").to_string();
|
||||
process.ppid = process_object.get("ppid").to_u32();
|
||||
process.nfds = process_object.get("nfds").to_u32();
|
||||
process.name = process_object.get("name").to_string();
|
||||
|
@ -40,14 +38,24 @@ HashMap<pid_t, CProcessStatistics> CProcessStatisticsReader::get_all()
|
|||
process.amount_virtual = process_object.get("amount_virtual").to_u32();
|
||||
process.amount_resident = process_object.get("amount_resident").to_u32();
|
||||
process.amount_shared = process_object.get("amount_shared").to_u32();
|
||||
process.ticks = process_object.get("ticks").to_u32();
|
||||
process.priority = process_object.get("priority").to_string();
|
||||
process.syscall_count = process_object.get("syscall_count").to_u32();
|
||||
process.inode_faults = process_object.get("inode_faults").to_u32();
|
||||
process.zero_faults = process_object.get("zero_faults").to_u32();
|
||||
process.cow_faults = process_object.get("cow_faults").to_u32();
|
||||
process.icon_id = process_object.get("icon_id").to_int();
|
||||
|
||||
auto thread_array = process_object.get("threads").as_array();
|
||||
thread_array.for_each([&](auto& value) {
|
||||
auto& thread_object = value.as_object();
|
||||
CThreadStatistics thread;
|
||||
thread.tid = thread_object.get("tid").to_u32();
|
||||
thread.times_scheduled = thread_object.get("times_scheduled").to_u32();
|
||||
thread.state = thread_object.get("state").to_string();
|
||||
thread.ticks = thread_object.get("ticks").to_u32();
|
||||
thread.priority = thread_object.get("priority").to_string();
|
||||
process.threads.append(move(thread));
|
||||
});
|
||||
|
||||
// and synthetic data last
|
||||
process.username = username_from_uid(process.uid);
|
||||
map.set(process.pid, process);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue