1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:38:11 +00:00

Add a /bin/top program for process table monitoring.

It automagically computes %CPU usage based on the number of times a process
has been scheduled between samples. The colonel task is used as idle timer.
This is pretty cool. :^)
This commit is contained in:
Andreas Kling 2019-02-04 10:28:12 +01:00
parent 642e2447c9
commit c0cffe1134
8 changed files with 156 additions and 4 deletions

View file

@ -7,6 +7,7 @@
#include "i386.h"
#include "KSyms.h"
#include "Console.h"
#include "Scheduler.h"
#include <AK/StringBuilder.h>
#include <LibC/errno_numbers.h>
@ -486,9 +487,10 @@ ByteBuffer procfs$all(InodeIdentifier)
InterruptDisabler disabler;
auto processes = Process::all_processes();
StringBuilder builder;
for (auto* process : processes) {
builder.appendf("%u,%u,%u,%u,%u,%u,%s,%u,%u,%u,%s,%s,%u,%u,%u\n",
auto build_process_line = [&builder] (Process* process) {
builder.appendf("%u,%u,%u,%u,%u,%u,%u,%s,%u,%u,%s,%s,%u,%u,%u\n",
process->pid(),
process->times_scheduled(),
process->tty() ? process->tty()->pgid() : 0,
process->pgid(),
process->sid(),
@ -496,7 +498,6 @@ ByteBuffer procfs$all(InodeIdentifier)
process->gid(),
to_string(process->state()),
process->ppid(),
process->times_scheduled(),
process->number_of_open_file_descriptors(),
process->tty() ? process->tty()->tty_name().characters() : "notty",
process->name().characters(),
@ -504,7 +505,10 @@ ByteBuffer procfs$all(InodeIdentifier)
process->amount_resident(),
process->amount_shared()
);
}
};
build_process_line(Scheduler::colonel());
for (auto* process : processes)
build_process_line(process);
return builder.to_byte_buffer();
}