How can I quickly get signal name from its number?
There is strsignal()
, but I just want the name, e.g. SIGUSR1
In other words, if we have macros like
Tested below code on Ubuntu 16.04 and MIPS and it works fine.
#include
#include
#include
#include
#include
extern const char * const sys_siglist[];
void upcase(char *s)
{
while (*s)
{
*s = toupper(*s);
s++;
}
}
int main(void)
{
int sig;
/*
NSIG returns number of signals available in a system
and it may vary according to platforms;Found on Ubuntu-16.04 it return 65
where as in MIPS it is 31; Found in both the platforms it leads to core dump
after signal 31 so limiting scanning of signal till 31 instead of using NSIG
*/
for (sig = 1; sig < 32; sig++)
{
char *str = strdup(sys_siglist[sig]);
if (!str)
return -1;
upcase(str);
printf("%2d -> SIG%s\n", sig, str);
free(str);
}
return 0;
}
The output of the above code on Ubuntu-16.04 (Intel x86_64 GNU/Linux):
1 -> SIGHANGUP
2 -> SIGINTERRUPT
3 -> SIGQUIT
4 -> SIGILLEGAL INSTRUCTION
5 -> SIGTRACE/BREAKPOINT TRAP
6 -> SIGABORTED
7 -> SIGBUS ERROR
8 -> SIGFLOATING POINT EXCEPTION
9 -> SIGKILLED
10 -> SIGUSER DEFINED SIGNAL 1
11 -> SIGSEGMENTATION FAULT
12 -> SIGUSER DEFINED SIGNAL 2
13 -> SIGBROKEN PIPE
14 -> SIGALARM CLOCK
15 -> SIGTERMINATED
16 -> SIGSTACK FAULT
17 -> SIGCHILD EXITED
18 -> SIGCONTINUED
19 -> SIGSTOPPED (SIGNAL)
20 -> SIGSTOPPED
21 -> SIGSTOPPED (TTY INPUT)
22 -> SIGSTOPPED (TTY OUTPUT)
23 -> SIGURGENT I/O CONDITION
24 -> SIGCPU TIME LIMIT EXCEEDED
25 -> SIGFILE SIZE LIMIT EXCEEDED
26 -> SIGVIRTUAL TIMER EXPIRED
27 -> SIGPROFILING TIMER EXPIRED
28 -> SIGWINDOW CHANGED
29 -> SIGI/O POSSIBLE
30 -> SIGPOWER FAILURE
31 -> SIGBAD SYSTEM CALL
The output of the above code on busybox (MIPS, Cavium):
1 -> SIGHANGUP
2 -> SIGINTERRUPT
3 -> SIGQUIT
4 -> SIGILLEGAL INSTRUCTION
5 -> SIGTRACE/BREAKPOINT TRAP
6 -> SIGABORTED
7 -> SIGEMT TRAP
8 -> SIGFLOATING POINT EXCEPTION
9 -> SIGKILLED
10 -> SIGBUS ERROR
11 -> SIGSEGMENTATION FAULT
12 -> SIGBAD SYSTEM CALL
13 -> SIGBROKEN PIPE
14 -> SIGALARM CLOCK
15 -> SIGTERMINATED
16 -> SIGUSER DEFINED SIGNAL 1
17 -> SIGUSER DEFINED SIGNAL 2
18 -> SIGCHILD EXITED
19 -> SIGPOWER FAILURE
20 -> SIGWINDOW CHANGED
21 -> SIGURGENT I/O CONDITION
22 -> SIGI/O POSSIBLE
23 -> SIGSTOPPED (SIGNAL)
24 -> SIGSTOPPED
25 -> SIGCONTINUED
26 -> SIGSTOPPED (TTY INPUT)
27 -> SIGSTOPPED (TTY OUTPUT)
28 -> SIGVIRTUAL TIMER EXPIRED
29 -> SIGPROFILING TIMER EXPIRED
30 -> SIGCPU TIME LIMIT EXCEEDED
31 -> SIGFILE SIZE LIMIT EXCEEDED