[英]Why is a signal handler I establish with signal() or sigaction() ignored?
我有以下问题:当我的代码在我的 Raspberry Pi 3(使用最近的 Raspbian)上运行时,我想捕获SIGINT
(以及后来的SIGTERM
) signals
以便进行一些清理(特别是关闭到 USB 设备的连接)当我停止我的(C++ 11)程序时。 首先我尝试了signal ()
,但信号处理程序从未启动。相反,我在点击 ^C 后在控制台上收到了这条消息:
2017-02-26 17:13:17 sigHandler: Unhandled signal 2, terminating
信号手册页建议改用sigaction()
。 好的,我在 本教程中用sigaction()
替换了signal()
sigaction()
,但没有用,处理程序从未被调用。 在阅读了一堆其他教程(比如这个)之后,我终于得到了这个代码片段:
void OnSignalCaught (int signal)
{
cout << "Exited." << endl;
exit (signal);
}
int main ()
{
struct sigaction exit_action;
struct sigaction old_action;
int ret;
sigemptyset (&exit_action.sa_mask);
exit_action.sa_handler = OnSignalCaught;
exit_action.sa_flags = 0;
ret = sigaction (SIGINT, &exit_action, &old_action);
if (ret < 0) cout << "Creating signal handler failed! Error code: " << errno << "." << endl;
// remainder of the code goes here
}
我一直在运行你的代码。 我只添加了缺少的标题,它起作用了,信号挂架被调用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.