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)
您可以使用这样的命令行
kill -l \
| sed 's/[0-9]*)//g' \
| xargs -n1 echo \
| awk '{ print "signal_map[\"" $0 "\"] = " $0 ";" }'
Run Code Online (Sandbox Code Playgroud)
它会为您编写地图.