如何将信号名称(string)转换为信号代码?

如何将信号名称(string)转换为信号代码?,第1张

概述如何将信号名称(string)转换为信号代码

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

目前,我正在通过编写我自己的地图,看起来像这样:

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

但是,对于所有的信号来说,这是很乏味的。 所以,如果它存在的话,我正在寻找更优雅的方式。

执行默认信号处理器

SIGCHLD信号处理

pipe道输出从“超时”到“wc -l”失败

XOPEN_SOURCE和信号处理

在linux中如何处理asynchronous信号?

POSIX定时器的运行频率是预期的两倍

用SIGTERM调用subprocess终止父进程,但用SIGKILL调用subprocess使父进程保持活动状态

致命错误:调用未定义的函数sem_get()

我如何编写处理信号的跨平台c ++?

即使系统崩溃,也能保持“几乎完整”的日志

不知道这是否是你所说的,但是:strerror()将错误代码转换为错误消息,类似的strsignal()将信号转换为信号消息。

fprintf(stdout,"signal 9: %sn",strsignal(9)); fprintf(stdout,"errno 60: %sn",strerror(60)); Output: signal 9: Killed errno 60: Device not a stream

你可以使用这样的命令行

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

它会为你写下你的地图。

使用C ++ 0x你可以使用初始化列表来使这个更简单:

const std::map<std::string,signal_t> signal_map{ {"SIGStop",SIGStop },{"SIGKILL",SIGKILL },... };

这得到了你的地图在更少的代码写。 如果你想要你也可以使用一些预处理器的魔法来让代码更简单,并避免多次写入这个名字。 但是大多数时候滥用预处理器只会导致可用的代码少,而不是更好的代码。 (请注意,如果您决定不使用C ++ 0x并保留自己的方式,则仍然可以使用预处理器魔术)。

总结

以上是内存溢出为你收集整理的如何将信号名称(string)转换为信号代码?全部内容,希望文章能够帮你解决如何将信号名称(string)转换为信号代码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存