From 0e42c75f5af2ff63c536a6fffddaa09b0306c1d2 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Sun, 2 Dec 2018 00:34:37 -0500 Subject: [PATCH] process: ntoa function for signals This enables signal numbers to be translated to names. Signed-off-by: Zygo Blaxell --- include/crucible/process.h | 2 ++ lib/process.cc | 73 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/include/crucible/process.h b/include/crucible/process.h index 3afcea6..52549b2 100644 --- a/include/crucible/process.h +++ b/include/crucible/process.h @@ -77,5 +77,7 @@ namespace crucible { double getloadavg1(); double getloadavg5(); double getloadavg15(); + + string signal_ntoa(int sig); } #endif // CRUCIBLE_PROCESS_H diff --git a/lib/process.cc b/lib/process.cc index 9be1070..32cf672 100644 --- a/lib/process.cc +++ b/lib/process.cc @@ -2,6 +2,7 @@ #include "crucible/chatter.h" #include "crucible/error.h" +#include "crucible/ntoa.h" #include #include @@ -152,4 +153,76 @@ namespace crucible { return loadavg[2]; } + static const struct bits_ntoa_table signals_table[] = { + + // POSIX.1-1990 + NTOA_TABLE_ENTRY_ENUM(SIGHUP), + NTOA_TABLE_ENTRY_ENUM(SIGINT), + NTOA_TABLE_ENTRY_ENUM(SIGQUIT), + NTOA_TABLE_ENTRY_ENUM(SIGILL), + NTOA_TABLE_ENTRY_ENUM(SIGABRT), + NTOA_TABLE_ENTRY_ENUM(SIGFPE), + NTOA_TABLE_ENTRY_ENUM(SIGKILL), + NTOA_TABLE_ENTRY_ENUM(SIGSEGV), + NTOA_TABLE_ENTRY_ENUM(SIGPIPE), + NTOA_TABLE_ENTRY_ENUM(SIGALRM), + NTOA_TABLE_ENTRY_ENUM(SIGTERM), + NTOA_TABLE_ENTRY_ENUM(SIGUSR1), + NTOA_TABLE_ENTRY_ENUM(SIGUSR2), + NTOA_TABLE_ENTRY_ENUM(SIGCHLD), + NTOA_TABLE_ENTRY_ENUM(SIGCONT), + NTOA_TABLE_ENTRY_ENUM(SIGSTOP), + NTOA_TABLE_ENTRY_ENUM(SIGTSTP), + NTOA_TABLE_ENTRY_ENUM(SIGTTIN), + NTOA_TABLE_ENTRY_ENUM(SIGTTOU), + + // SUSv2 and POSIX.1-2001 + NTOA_TABLE_ENTRY_ENUM(SIGBUS), + NTOA_TABLE_ENTRY_ENUM(SIGPOLL), + NTOA_TABLE_ENTRY_ENUM(SIGPROF), + NTOA_TABLE_ENTRY_ENUM(SIGSYS), + NTOA_TABLE_ENTRY_ENUM(SIGTRAP), + NTOA_TABLE_ENTRY_ENUM(SIGURG), + NTOA_TABLE_ENTRY_ENUM(SIGVTALRM), + NTOA_TABLE_ENTRY_ENUM(SIGXCPU), + NTOA_TABLE_ENTRY_ENUM(SIGXFSZ), + + // Other + NTOA_TABLE_ENTRY_ENUM(SIGIOT), +#ifdef SIGEMT + NTOA_TABLE_ENTRY_ENUM(SIGEMT), +#endif + NTOA_TABLE_ENTRY_ENUM(SIGSTKFLT), + NTOA_TABLE_ENTRY_ENUM(SIGIO), + NTOA_TABLE_ENTRY_ENUM(SIGCLD), + NTOA_TABLE_ENTRY_ENUM(SIGPWR), +#ifdef SIGINFO + NTOA_TABLE_ENTRY_ENUM(SIGINFO), +#endif +#ifdef SIGLOST + NTOA_TABLE_ENTRY_ENUM(SIGLOST), +#endif + NTOA_TABLE_ENTRY_ENUM(SIGWINCH), + NTOA_TABLE_ENTRY_ENUM(SIGUNUSED), + + // realtime + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+1U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+2U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+3U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+4U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+5U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+6U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMIN+7U), + NTOA_TABLE_ENTRY_ENUM(SIGRTMAX), + + NTOA_TABLE_ENTRY_END(), + }; + + string + signal_ntoa(int sig) + { + return bits_ntoa(sig, signals_table); + } + }