File indexing completed on 2024-04-21 05:51:30

0001 /*
0002     Author: Kasper Laudrup <laudrup@stacktrace.dk>
0003     This code is in the public domain.
0004     From patch from bko 214908
0005 */
0006 #include <signal.h>
0007 #include <stdio.h>
0008 #include <string.h>
0009 
0010 int signals[] = {SIGSTOP, SIGCONT, SIGHUP, SIGINT, SIGTERM, SIGKILL, SIGUSR1, SIGUSR2};
0011 
0012 print_signal_name(int signal)
0013 {
0014     char *signame;
0015     switch (signal) {
0016     case SIGSTOP:
0017         signame = "SIGSTOP";
0018         break;
0019     case SIGCONT:
0020         signame = "SIGCONT";
0021         break;
0022     case SIGHUP:
0023         signame = "SIGHUP";
0024         break;
0025     case SIGINT:
0026         signame = "SIGINT";
0027         break;
0028     case SIGTERM:
0029         signame = "SIGTERM";
0030         break;
0031     case SIGKILL:
0032         signame = "SIGKILL";
0033         break;
0034     case SIGUSR1:
0035         signame = "SIGUSR1";
0036         break;
0037     case SIGUSR2:
0038         signame = "SIGUSR1";
0039         break;
0040     default:
0041         signame = "UNKNOWN";
0042         break;
0043     }
0044     printf("Caught signal: %s\n", signame);
0045 }
0046 
0047 void handler(int signal)
0048 {
0049 }
0050 
0051 int main(int argc, char *argv[])
0052 {
0053     sigset_t waitset;
0054     struct sigaction sigact;
0055     int signal, result, i;
0056     int signals_size = sizeof(signals) / sizeof(int);
0057 
0058     sigemptyset(&sigact.sa_mask);
0059     sigemptyset(&waitset);
0060     sigact.sa_flags = 0;
0061     sigact.sa_handler = handler;
0062     for (i = 0; i < signals_size; i++) {
0063         sigaction(signals[i], &sigact, NULL);
0064         sigaddset(&waitset, signals[i]);
0065     }
0066 
0067     printf("Waiting for signal\n");
0068     result = sigwait(&waitset, &signal);
0069     if (result == 0) {
0070         print_signal_name(signal);
0071         return 0;
0072     } else {
0073         char *error = strerror(result);
0074         printf("Error calling sigwait: %s\n", error);
0075         return 1;
0076     }
0077 }