为什么忽略信号()或sigaction()忽略信号处理程序
Why is a signal handler I establish with signal() or sigaction() ignored?
我有以下问题:我想在我的raspberry pi 3(带有最近的raspbian)运行时捕获SIGINT
(以及后来的SIGTERM
)signals
为了在我停止(C 11)程序时进行一些清理(尤其是关闭与USB设备的连接)。首先,我尝试了signal ()
,但是信号处理程序从未启动过。
2017-02-26 17:13:17 sigHandler: Unhandled signal 2, terminating
信号manpage建议改用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
}
我一直在运行您的代码。我只添加了缺少的标题,并且它可以工作,信号挂式机被调用。
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 通过安装信号处理程序关闭多线程应用程序
- 为什么我的信号处理程序只执行一次?
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- C++ 在信号处理程序后继续执行
- 没有信号处理程序的POSIX定时器的目的是什么?
- 为什么这个信号处理程序不能捕获 SIGHUP 或 SIGQUIT?
- 如何在C++中使用 std::bind 函数作为信号处理程序?
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 如何将信号处理程序添加为方法
- 窗口上信号处理程序的异步安全写入函数
- 使用信号处理程序处理从 FIFO 接收的数据
- gtkmm/glade - 将信号处理程序连接到 MenuShell
- GTK+3 编译错误"找不到信号处理程序",您是否使用 -rdynamic 进行了编译?
- Linux 中的信号处理程序使用 sigaction (C++)
- 使用 enum 参数将 C++ 对象信号连接到 QML 信号处理程序
- 信号处理程序不要求使用dlopen或dlclose