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