diff --git a/fairmq/shmem/Monitor.cxx b/fairmq/shmem/Monitor.cxx index d044310f..55dc343d 100644 --- a/fairmq/shmem/Monitor.cxx +++ b/fairmq/shmem/Monitor.cxx @@ -45,6 +45,27 @@ namespace namespace fair::mq::shmem { +struct TerminalConfig +{ + TerminalConfig() + { + termios t; + tcgetattr(STDIN_FILENO, &t); // get the current terminal I/O structure + t.c_lflag &= ~ICANON; // disable canonical input + t.c_lflag &= ~ECHO; // do not echo input chars + tcsetattr(STDIN_FILENO, TCSANOW, &t); // apply the new settings + } + + ~TerminalConfig() + { + termios t; + tcgetattr(STDIN_FILENO, &t); // get the current terminal I/O structure + t.c_lflag |= ICANON; // re-enable canonical input + t.c_lflag |= ECHO; // echo input chars + tcsetattr(STDIN_FILENO, TCSANOW, &t); // apply the new settings + } +}; + void signalHandler(int signal) { gSignalStatus = signal; @@ -116,10 +137,7 @@ void Monitor::Run() if (fInteractive) { Interactive(); } else { - while (!fTerminating) { - this_thread::sleep_for(chrono::milliseconds(fIntervalInMS)); - CheckSegment(); - } + CheckSegment(); } if (!fViewOnly) { @@ -154,27 +172,6 @@ void Monitor::MonitorHeartbeats() RemoveQueue(fControlQueueName); } -struct TerminalConfig -{ - TerminalConfig() - { - termios t; - tcgetattr(STDIN_FILENO, &t); // get the current terminal I/O structure - t.c_lflag &= ~ICANON; // disable canonical input - t.c_lflag &= ~ECHO; // do not echo input chars - tcsetattr(STDIN_FILENO, TCSANOW, &t); // apply the new settings - } - - ~TerminalConfig() - { - termios t; - tcgetattr(STDIN_FILENO, &t); // get the current terminal I/O structure - t.c_lflag |= ICANON; // re-enable canonical input - t.c_lflag |= ECHO; // echo input chars - tcsetattr(STDIN_FILENO, TCSANOW, &t); // apply the new settings - } -}; - void Monitor::Interactive() { char c; diff --git a/fairmq/shmem/runMonitor.cxx b/fairmq/shmem/runMonitor.cxx index 8af03c7f..b704958e 100644 --- a/fairmq/shmem/runMonitor.cxx +++ b/fairmq/shmem/runMonitor.cxx @@ -125,13 +125,12 @@ int main(int argc, char** argv) } cout << "Starting shared memory monitor for session: \"" << sessionName << "\" (shmId: " << shmId << ")..." << endl; - if (viewOnly && !interactive) { - cout << "running in non-interactive view-only mode, outputting with interval of " << intervalInMS << "ms. (change with --interval), press ctrl+C to exit." << endl; - } Monitor monitor(shmId, selfDestruct, interactive, viewOnly, timeoutInMS, intervalInMS, runAsDaemon, cleanOnExit); - monitor.CatchSignals(); + if (interactive || !viewOnly) { + monitor.CatchSignals(); + } monitor.Run(); } catch (Monitor::DaemonPresent& dp) { return 0;