ladybird/Userland/ps.cpp
Andreas Kling 712ae73581 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.
2019-11-26 21:37:30 +01:00

40 lines
1,000 B
C++

#include <LibCore/CFile.h>
#include <LibCore/CProcessStatisticsReader.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv)
{
(void)argc;
(void)argv;
printf("PID TPG PGP SID UID STATE PPID NSCHED FDS TTY NAME\n");
auto all_processes = CProcessStatisticsReader::get_all();
for (const auto& it : all_processes) {
const auto& proc = it.value;
auto tty = proc.tty;
if (tty.starts_with("/dev/"))
tty = tty.characters() + 5;
else
tty = "n/a";
printf("%-3u %-3u %-3u %-3u %-3u %-11s %-3u %-9u %-3u %-5s %s\n",
proc.pid,
proc.pgid,
proc.pgp,
proc.sid,
proc.uid,
proc.threads.first().state.characters(),
proc.ppid,
proc.threads.first().times_scheduled,
proc.nfds,
tty.characters(),
proc.name.characters());
}
return 0;
}