1 #include "tests.h"
2 #include <signal.h>
3 #include <stdio.h>
4 #include <unistd.h>
5
sig_print(const char * signame,const int pid,const int uid)6 void sig_print(const char *signame, const int pid, const int uid)
7 {
8 printf("kill(%d, %s) = 0\n"
9 "--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
10 ", si_uid=%d} ---\n",
11 pid, signame, signame, signame, pid, uid);
12 }
13
14 static void
handler(int sig)15 handler(int sig)
16 {
17 }
18
19 int
main(void)20 main(void)
21 {
22 int sig, pid = getpid(), uid = getuid();
23 const struct sigaction act = { .sa_handler = handler };
24 sigset_t mask;
25 sigemptyset(&mask);
26
27 for (sig = 1; sig <= 31; sig++) {
28 if (sig != SIGKILL && sig != SIGSTOP) {
29 sigaction(sig, &act, NULL);
30 sigaddset(&mask, sig);
31 }
32 }
33 sigprocmask(SIG_UNBLOCK, &mask, NULL);
34
35 for (sig = 1; sig <= 31; sig++) {
36 if (sig != SIGKILL && sig != SIGSTOP) {
37 if (kill(pid, sig) != 0)
38 perror_msg_and_fail("kill: %d", sig);
39 sig_print(signal2name(sig), pid, uid);
40 }
41 }
42
43 puts("+++ exited with 0 +++");
44 return 0;
45 }
46