我遇到了以下问题:当我的代码在我的Raspberry Pi 3上运行时,我希望抓住SIGINT
(以及后来SIGTERM
} signals
最近的Raspbian)当我停止我的(C ++ 11)程序时,为了做一些清理(特别是关闭USB设备的连接)。首先我尝试了signal ()
,但是信号处理程序从未踢过。相反,我在点击^ C后在我的控制台上收到了这条消息:
2017-02-26 17:13:17 sigHandler: Unhandled signal 2, terminating
signal manpage建议改为使用sigaction()
。好的,我用this tutorial将signal()
替换为sigaction()
,但没有用,处理程序永远不会被调用。在阅读了一堆其他教程(如this one)之后,我最终得到了这段代码:
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
}
答案 0 :(得分:0)
我一直在运行你的代码。我只添加了丢失的标题,它可以工作,信号挂机被调用。