From bced810880d38b0ff1ebdebc9d47c1ef081e3fa1 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 24 Oct 2019 20:56:13 +0200 Subject: [PATCH] HackStudio: Show the slave pty's PGID in the ProcessStateWidget This is the closest I could figure out how to get to what's actively running on the terminal view at the moment. Perhaps we can bundle up every process with the same tty and sum it all up somehow. I'm not sure. --- DevTools/HackStudio/ProcessStateWidget.cpp | 13 ++++++++----- DevTools/HackStudio/ProcessStateWidget.h | 4 ++-- DevTools/HackStudio/TerminalWrapper.cpp | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/DevTools/HackStudio/ProcessStateWidget.cpp b/DevTools/HackStudio/ProcessStateWidget.cpp index 98a0ab4bbb..696ee804d7 100644 --- a/DevTools/HackStudio/ProcessStateWidget.cpp +++ b/DevTools/HackStudio/ProcessStateWidget.cpp @@ -3,6 +3,7 @@ #include #include #include +#include ProcessStateWidget::ProcessStateWidget(GWidget* parent) : GWidget(parent) @@ -40,7 +41,7 @@ ProcessStateWidget::~ProcessStateWidget() void ProcessStateWidget::refresh() { - if (m_pid == -1) { + if (m_tty_fd == -1) { m_pid_label->set_text("(none)"); m_state_label->set_text("n/a"); m_cpu_label->set_text("n/a"); @@ -48,8 +49,10 @@ void ProcessStateWidget::refresh() return; } + pid_t pid = tcgetpgrp(m_tty_fd); + auto processes = CProcessStatisticsReader::get_all(); - auto child_process_data = processes.get(m_pid); + auto child_process_data = processes.get(pid); if (!child_process_data.has_value()) return; @@ -58,14 +61,14 @@ void ProcessStateWidget::refresh() auto& data = active_process_data.value(); - m_pid_label->set_text(String::format("%s(%d)", data.name.characters(), m_pid)); + m_pid_label->set_text(String::format("%s(%d)", data.name.characters(), pid)); m_state_label->set_text(data.state); m_cpu_label->set_text(String::format("%d", data.times_scheduled)); m_memory_label->set_text(String::format("%d", data.amount_resident)); } -void ProcessStateWidget::set_pid(pid_t pid) +void ProcessStateWidget::set_tty_fd(int tty_fd) { - m_pid = pid; + m_tty_fd = tty_fd; refresh(); } diff --git a/DevTools/HackStudio/ProcessStateWidget.h b/DevTools/HackStudio/ProcessStateWidget.h index 5f9c35c0c0..572148679e 100644 --- a/DevTools/HackStudio/ProcessStateWidget.h +++ b/DevTools/HackStudio/ProcessStateWidget.h @@ -10,7 +10,7 @@ class ProcessStateWidget final : public GWidget { public: virtual ~ProcessStateWidget() override; - void set_pid(pid_t); + void set_tty_fd(int); private: explicit ProcessStateWidget(GWidget* parent); @@ -24,5 +24,5 @@ private: RefPtr m_timer; - pid_t m_pid { -1 }; + int m_tty_fd { -1 }; }; diff --git a/DevTools/HackStudio/TerminalWrapper.cpp b/DevTools/HackStudio/TerminalWrapper.cpp index 6ee696eed9..3e6303680d 100644 --- a/DevTools/HackStudio/TerminalWrapper.cpp +++ b/DevTools/HackStudio/TerminalWrapper.cpp @@ -45,7 +45,7 @@ void TerminalWrapper::run_command(const String& command) } else if (WIFSIGNALED(wstatus)) { m_terminal_widget->inject_string(String::format("\033[34;1m(Command signaled with %s!)\033[0m\n", strsignal(WTERMSIG(wstatus)))); } - m_process_state_widget->set_pid(-1); + m_process_state_widget->set_tty_fd(-1); m_pid = -1; }; @@ -110,7 +110,7 @@ void TerminalWrapper::run_command(const String& command) } // Parent process, cont'd. - m_process_state_widget->set_pid(m_pid); + m_process_state_widget->set_tty_fd(ptm_fd); } TerminalWrapper::TerminalWrapper(GWidget* parent)