如何将信号名称(字符串)转换为信号代码?

vin*_*one 7 c++ linux posix signals

我正在编写一个程序,它从命令行读取信号名称(例如SIGSTOP,SIGKILL等)作为字符串,并调用kill()系统调用来发送信号.我想知道是否有一种简单的方法将字符串转换为信号代码(在signal.h中).

目前,我这样做是通过编写我自己的地图,如下所示:

signal_map["SIGSTOP"] = SIGSTOP;
signal_map["SIGKILL"] = SIGKILL;
....
Run Code Online (Sandbox Code Playgroud)

但是为所有信号写这个都很乏味.所以,我正在寻找一种更优雅的方式,如果它存在的话.

Chr*_*ris 15

不确定这是否是你所要求的,但是:strerror()将错误代码转换为错误消息,类似的strsignal()将信号转换为信号消息.

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
Run Code Online (Sandbox Code Playgroud)


n. *_* m. 5

您可以使用这样的命令行

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

它会为您编写地图.