1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 04:17:35 +00:00

LibCore: Use Core::Stream for ProcessStatisticsReader

This commit is contained in:
Tim Schumacher 2022-12-08 14:50:31 +01:00 committed by Linus Groh
parent e338a0656d
commit 8940f2da7f
18 changed files with 55 additions and 95 deletions

View file

@ -21,11 +21,9 @@ static void print_usage_and_exit()
static ErrorOr<int> kill_all(DeprecatedString const& process_name, unsigned const signum)
{
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value())
return 1;
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
for (auto& process : all_processes.value().processes) {
for (auto& process : all_processes.processes) {
if (process.name == process_name) {
TRY(Core::System::kill(process.pid, signum));
}

View file

@ -141,11 +141,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
}
outln("{:28} {:>4} {:>4} {:10} {:>4} {}", "COMMAND", "PID", "PGID", "USER", "FD", "NAME");
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value())
return 1;
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
if (arg_pid == -1) {
for (auto& process : all_processes.value().processes) {
for (auto& process : all_processes.processes) {
if (process.pid == 0)
continue;
auto open_files = get_open_files_by_pid(process.pid);
@ -170,7 +168,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
return 0;
for (auto& file : open_files) {
display_entry(file, *all_processes->processes.find_if([&](auto& entry) { return entry.pid == arg_pid; }));
display_entry(file, *all_processes.processes.find_if([&](auto& entry) { return entry.pid == arg_pid; }));
}
}

View file

@ -58,11 +58,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
HashMap<pid_t, DeprecatedString> programs;
if (flag_program) {
auto processes = Core::ProcessStatisticsReader::get_all();
if (!processes.has_value())
return 1;
auto processes = TRY(Core::ProcessStatisticsReader::get_all());
for (auto& proc : processes.value().processes) {
for (auto& proc : processes.processes) {
programs.set(proc.pid, proc.name);
}
}

View file

@ -38,12 +38,10 @@ ErrorOr<int> serenity_main(Main::Arguments args)
return 1;
}
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value())
return 1;
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
Vector<pid_t> matches;
for (auto& it : all_processes.value().processes) {
for (auto& it : all_processes.processes) {
auto result = re.match(it.name, PosixFlags::Global);
if (result.success ^ invert_match) {
matches.append(it.pid);

View file

@ -18,11 +18,9 @@ static ErrorOr<int> pid_of(DeprecatedString const& process_name, bool single_sho
{
bool displayed_at_least_one = false;
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value())
return 1;
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
for (auto& it : all_processes.value().processes) {
for (auto& it : all_processes.processes) {
if (it.name == process_name) {
if (!omit_pid || it.pid != pid) {
out(displayed_at_least_one ? " {}"sv : "{}"sv, it.pid);

View file

@ -34,10 +34,7 @@ ErrorOr<int> serenity_main(Main::Arguments args)
args_parser.add_positional_argument(pattern, "Process name to search for", "process-name");
args_parser.parse(args);
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value()) {
return 1;
}
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
PosixOptions options {};
if (case_insensitive) {
@ -50,7 +47,7 @@ ErrorOr<int> serenity_main(Main::Arguments args)
}
Vector<Core::ProcessStatistics> matched_processes;
for (auto& process : all_processes.value().processes) {
for (auto& process : all_processes.processes) {
auto result = re.match(process.name, PosixFlags::Global);
if (result.success) {
matched_processes.append(process);

View file

@ -98,11 +98,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
cmd_column = add_column("CMD", Alignment::Left);
}
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value())
return 1;
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
auto& processes = all_processes.value().processes;
auto& processes = all_processes.processes;
if (!pid_list.is_empty()) {
every_process_flag = true;

View file

@ -89,14 +89,12 @@ struct Snapshot {
u64 total_time_scheduled_kernel { 0 };
};
static Snapshot get_snapshot()
static ErrorOr<Snapshot> get_snapshot()
{
auto all_processes = Core::ProcessStatisticsReader::get_all();
if (!all_processes.has_value())
return {};
auto all_processes = TRY(Core::ProcessStatisticsReader::get_all());
Snapshot snapshot;
for (auto& process : all_processes.value().processes) {
for (auto& process : all_processes.processes) {
for (auto& thread : process.threads) {
ThreadData thread_data;
thread_data.tid = thread.tid;
@ -126,8 +124,8 @@ static Snapshot get_snapshot()
}
}
snapshot.total_time_scheduled = all_processes->total_time_scheduled;
snapshot.total_time_scheduled_kernel = all_processes->total_time_scheduled_kernel;
snapshot.total_time_scheduled = all_processes.total_time_scheduled;
snapshot.total_time_scheduled_kernel = all_processes.total_time_scheduled_kernel;
return snapshot;
}
@ -216,7 +214,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
enable_nonblocking_stdin();
Vector<ThreadData*> threads;
auto prev = get_snapshot();
auto prev = TRY(get_snapshot());
usleep(10000);
for (;;) {
if (g_window_size_changed) {
@ -224,7 +222,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
g_window_size_changed = false;
}
auto current = get_snapshot();
auto current = TRY(get_snapshot());
auto total_scheduled_diff = current.total_time_scheduled - prev.total_time_scheduled;
printf("\033[3J\033[H\033[2J");

View file

@ -33,11 +33,7 @@ ErrorOr<int> serenity_main(Main::Arguments)
return 1;
}
auto process_statistics = Core::ProcessStatisticsReader::get_all();
if (!process_statistics.has_value()) {
warnln("Error: Could not get process statistics");
return 1;
}
auto process_statistics = TRY(Core::ProcessStatisticsReader::get_all());
auto now = time(nullptr);
@ -70,7 +66,7 @@ ErrorOr<int> serenity_main(Main::Arguments)
DeprecatedString what = "n/a";
for (auto& process : process_statistics.value().processes) {
for (auto& process : process_statistics.processes) {
if (process.tty == tty && process.pid == process.pgid)
what = process.name;
}