diff options
Diffstat (limited to 'command/markad-standalone.cpp')
-rw-r--r-- | command/markad-standalone.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/command/markad-standalone.cpp b/command/markad-standalone.cpp index ebca1eb..3eb2e05 100644 --- a/command/markad-standalone.cpp +++ b/command/markad-standalone.cpp @@ -1315,10 +1315,23 @@ int usage() return -1; } -void signal_handler(int sig) +static void signal_handler(int sig) { switch (sig) { + case SIGTSTP: + isyslog("paused by signal"); + sigset_t mask; + sigemptyset(&mask); + sigaddset(&mask, SIGTSTP); + sigprocmask(SIG_UNBLOCK, &mask, NULL); + signal(SIGTSTP,SIG_DFL); + kill(getpid(),SIGTSTP); + signal(SIGTSTP,signal_handler); + break; + case SIGCONT: + isyslog("continued by signal"); + break; case SIGABRT: esyslog("aborted by signal"); if (cmasta) cmasta->SetAbort(); @@ -1802,6 +1815,9 @@ int main(int argc, char *argv[]) signal(SIGSEGV, signal_handler); signal(SIGABRT, signal_handler); signal(SIGUSR1, signal_handler); + signal(SIGTSTP, signal_handler); + signal(SIGCONT, signal_handler); + cmasta->Process(recDir); delete cmasta; |