我遇到了以下问题:当我的代码在 Raspberry Pi 3(带有最新的 Raspbian)上运行时,我想捕获
SIGINT
(以及后来的 SIGTERM
)signals
,以便执行一些操作当我停止我的 (C++ 11) 程序时进行清理(特别是关闭与 USB 设备的连接)。首先,我尝试了 signal ()
,但信号处理程序从未启动。相反,我在点击 ^C: 后在控制台上收到了此消息
2017-02-26 17:13:17 sigHandler: Unhandled signal 2, terminating
信号手册页建议使用
sigaction()
代替。好的,我用 thistutorial 将 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
}
我一直在运行你的代码。我只添加了缺少的标头,并且它有效,信号悬挂器被调用。
你的意思是signal.h?我必须假设你没有说,我看了:https://www.woolseyworkshop.com/2018/06/20/blink-making-an-led-blink-on-a-raspberry-pi/ #使用CWithThePIGPIOLibrary