![]() |
Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* monitor.c -- watch job control signals */
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void catchSignal(int sigNum, int useDefault);
void handler(int signum) {
if (signum == SIGTSTP) {
write(STDOUT_FILENO, "got SIGTSTP\n", 12);
catchSignal(SIGTSTP, 1);
kill(getpid(), SIGTSTP);
} else {
write(STDOUT_FILENO, "got SIGCONT\n", 12);
catchSignal(SIGTSTP, 0);
}
}
void catchSignal(int sigNum, int useDefault) {
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
if (useDefault)
sa.sa_handler = SIG_DFL;
else
sa.sa_handler = handler;
if (sigaction(sigNum, &sa, NULL)) perror("sigaction");
}
int main() {
catchSignal(SIGTSTP, 0);
catchSignal(SIGCONT, 0);
while (1) ;
return 0;
}