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 }