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; }