1 /*
2 * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@strace.io>
3 * Copyright (c) 2015-2021 The strace developers.
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9 #include <assert.h>
10 #include <stdlib.h>
11 #include <unistd.h>
12 #include <signal.h>
13
14 static void handle_signal(int no)
15 {
16 _exit(128 + no);
17 }
18
19 int
20 main(void)
21 {
22 struct sigaction sa, sa0;
23
24 sa.sa_handler = SIG_IGN;
25 sigemptyset(&sa.sa_mask);
26 sigaddset(&sa.sa_mask, SIGHUP);
27 sigaddset(&sa.sa_mask, SIGINT);
28 sa.sa_flags = SA_RESTART;
29 assert(!sigaction(SIGUSR2, &sa, &sa0));
30
31 sa.sa_handler = handle_signal;
32 sigemptyset(&sa.sa_mask);
33 sigaddset(&sa.sa_mask, SIGQUIT);
34 sigaddset(&sa.sa_mask, SIGTERM);
35 sa.sa_flags = SA_SIGINFO;
36 assert(!sigaction(SIGUSR2, &sa, &sa0));
37
38 sa.sa_handler = SIG_DFL;
39 sigemptyset(&sa.sa_mask);
40 sa.sa_flags = 0;
41 assert(!sigaction(SIGUSR2, &sa, &sa0));
42
43 sigfillset(&sa.sa_mask);
44 sigdelset(&sa.sa_mask, SIGHUP);
45 assert(!sigaction(SIGUSR2, &sa, &sa0));
46
47 return 0;
48 }