Compare commits

..

2 Commits

Author SHA1 Message Date
Alexey Rybalchenko
93dff3c5a7 Fix regression in shmmonitor 2021-02-19 09:54:29 +01:00
Alexey Rybalchenko
2b3e38d9a4 shmmonitor: non-interactive mode checks and quits 2021-02-10 10:36:08 +01:00
2 changed files with 26 additions and 25 deletions

View File

@@ -45,6 +45,27 @@ namespace
namespace fair::mq::shmem 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) void signalHandler(int signal)
{ {
gSignalStatus = signal; gSignalStatus = signal;
@@ -115,6 +136,8 @@ void Monitor::Run()
if (fInteractive) { if (fInteractive) {
Interactive(); Interactive();
} else if (fViewOnly) {
CheckSegment();
} else { } else {
while (!fTerminating) { while (!fTerminating) {
this_thread::sleep_for(chrono::milliseconds(fIntervalInMS)); this_thread::sleep_for(chrono::milliseconds(fIntervalInMS));
@@ -154,27 +177,6 @@ void Monitor::MonitorHeartbeats()
RemoveQueue(fControlQueueName); 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() void Monitor::Interactive()
{ {
char c; char c;

View File

@@ -125,13 +125,12 @@ int main(int argc, char** argv)
} }
cout << "Starting shared memory monitor for session: \"" << sessionName << "\" (shmId: " << shmId << ")..." << endl; 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 monitor(shmId, selfDestruct, interactive, viewOnly, timeoutInMS, intervalInMS, runAsDaemon, cleanOnExit);
monitor.CatchSignals(); if (interactive || !viewOnly) {
monitor.CatchSignals();
}
monitor.Run(); monitor.Run();
} catch (Monitor::DaemonPresent& dp) { } catch (Monitor::DaemonPresent& dp) {
return 0; return 0;