Files
konsole/tests/features/signaltests.c
Ahmad Samir 97569b764c Run clang-format on the whole repo
Also install the relevant git hook.

GIT_SILENT
2021-09-06 12:51:39 +02:00

78 lines
1.6 KiB
C

/*
Author: Kasper Laudrup <laudrup@stacktrace.dk>
This code is in the public domain.
From patch from bko 214908
*/
#include <signal.h>
#include <stdio.h>
#include <string.h>
int signals[] = {SIGSTOP, SIGCONT, SIGHUP, SIGINT, SIGTERM, SIGKILL, SIGUSR1, SIGUSR2};
print_signal_name(int signal)
{
char *signame;
switch (signal) {
case SIGSTOP:
signame = "SIGSTOP";
break;
case SIGCONT:
signame = "SIGCONT";
break;
case SIGHUP:
signame = "SIGHUP";
break;
case SIGINT:
signame = "SIGINT";
break;
case SIGTERM:
signame = "SIGTERM";
break;
case SIGKILL:
signame = "SIGKILL";
break;
case SIGUSR1:
signame = "SIGUSR1";
break;
case SIGUSR2:
signame = "SIGUSR1";
break;
default:
signame = "UNKNOWN";
break;
}
printf("Caught signal: %s\n", signame);
}
void handler(int signal)
{
}
int main(int argc, char *argv[])
{
sigset_t waitset;
struct sigaction sigact;
int signal, result, i;
int signals_size = sizeof(signals) / sizeof(int);
sigemptyset(&sigact.sa_mask);
sigemptyset(&waitset);
sigact.sa_flags = 0;
sigact.sa_handler = handler;
for (i = 0; i < signals_size; i++) {
sigaction(signals[i], &sigact, NULL);
sigaddset(&waitset, signals[i]);
}
printf("Waiting for signal\n");
result = sigwait(&waitset, &signal);
if (result == 0) {
print_signal_name(signal);
return 0;
} else {
char *error = strerror(result);
printf("Error calling sigwait: %s\n", error);
return 1;
}
}