#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void handle_signal(int signum) {
switch(signum) {
case SIGHUP:
fprintf(stderr, "Caught signal HUP\n");
fprintf(stderr, "Now ignoring SIGHUP\n");
signal(SIGHUP, SIG_IGN);
case SIGQUIT:
fprintf(stderr, "Goodbye!\n");
exit(0);
}
}
int main() {
pid_t pid;
pid = fork();
if (pid == 0) {
signal(SIGHUP, handle_signal);
signal(SIGQUIT, handle_signal);
fprintf(stderr, "\n---------------------\n");
fprintf(stderr, "Now try 'kill -HUP %d'\n", getpid());
fprintf(stderr, "Use 'kill -QUIT %d' to end\n", getpid());
while(1) {
if(signal(SIGHUP, handle_signal) == SIG_IGN)
fprintf(stderr, "Detected SIGHUP as being ignored. Now listening again.\n");
sleep(5);
}
}
return 0;
}