#include "tests.h"
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void sig_print(const char *signame, const int pid, const int uid)
{
printf("kill(%d, %s) = 0\n"
"--- %s {si_signo=%s, si_code=SI_USER, si_pid=%d"
", si_uid=%d} ---\n",
pid, signame, signame, signame, pid, uid);
}
static void
handler(int sig)
{
}
int
main(void)
{
int sig, pid = getpid(), uid = getuid();
const struct sigaction act = { .sa_handler = handler };
sigset_t mask;
sigemptyset(&mask);
for (sig = 1; sig <= 31; sig++) {
if (sig != SIGKILL && sig != SIGSTOP) {
sigaction(sig, &act, NULL);
sigaddset(&mask, sig);
}
}
sigprocmask(SIG_UNBLOCK, &mask, NULL);
for (sig = 1; sig <= 31; sig++) {
if (sig != SIGKILL && sig != SIGSTOP) {
if (kill(pid, sig) != 0)
perror_msg_and_fail("kill: %d", sig);
sig_print(signal2name(sig), pid, uid);
}
}
puts("+++ exited with 0 +++");
return 0;
}