Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert signal name (string) to signal code?

I am writing a program that reads the name of the signal (e.g. SIGSTOP, SIGKILL etc) as a string from the command line and calls the kill() system call to send the signal. I was wondering if there is a simple way to convert the string to signal codes (in signal.h).

Currently, I'm doing this by writing my own map that looks like this:

signal_map["SIGSTOP"] = SIGSTOP;
signal_map["SIGKILL"] = SIGKILL;
....

But its tedious to write this for all signals. So, I was looking for a more elegant way, if it exists.

like image 996
vinodkone Avatar asked Aug 09 '11 00:08

vinodkone


2 Answers

Not sure if that is what you are loking for, but: strerror() converts a error code to the error message, similar strsignal() converts a signal to the signal message.

fprintf(stdout, "signal 9: %s\n", strsignal(9));
fprintf(stdout, "errno 60: %s\n", strerror(60));

Output:
signal 9: Killed
errno 60: Device not a stream
like image 112
Chris Avatar answered Oct 15 '22 02:10

Chris


You can use a command line like this

kill -l \
        | sed 's/[0-9]*)//g' \
        | xargs -n1 echo \
        | awk '{ print "signal_map[\"" $0 "\"] = " $0 ";" }'

It will write your map for you.

like image 23
n. 1.8e9-where's-my-share m. Avatar answered Oct 15 '22 02:10

n. 1.8e9-where's-my-share m.