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.
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With