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)