#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; }