1 #include <assert.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <signal.h> 5 6 static void handle_signal(int no) 7 { 8 _exit(128 + no); 9 } 10 11 int 12 main(void) 13 { 14 struct sigaction sa, sa0; 15 16 sa.sa_handler = SIG_IGN; 17 sigemptyset(&sa.sa_mask); 18 sigaddset(&sa.sa_mask, SIGHUP); 19 sigaddset(&sa.sa_mask, SIGINT); 20 sa.sa_flags = SA_RESTART; 21 assert(!sigaction(SIGUSR2, &sa, &sa0)); 22 23 sa.sa_handler = handle_signal; 24 sigemptyset(&sa.sa_mask); 25 sigaddset(&sa.sa_mask, SIGQUIT); 26 sigaddset(&sa.sa_mask, SIGTERM); 27 sa.sa_flags = SA_SIGINFO; 28 assert(!sigaction(SIGUSR2, &sa, &sa0)); 29 30 sa.sa_handler = SIG_DFL; 31 sigemptyset(&sa.sa_mask); 32 sa.sa_flags = 0; 33 assert(!sigaction(SIGUSR2, &sa, &sa0)); 34 35 sigfillset(&sa.sa_mask); 36 sigdelset(&sa.sa_mask, SIGHUP); 37 assert(!sigaction(SIGUSR2, &sa, &sa0)); 38 39 return 0; 40 } 41