1 #include <assert.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <signal.h>
5
handle_signal(int no)6 static void handle_signal(int no)
7 {
8 _exit(128 + no);
9 }
10
11 int
main(void)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