繁体   English   中英

为什么我用 signal() 或 sigaction() 建立的信号处理程序会被忽略?

[英]Why is a signal handler I establish with signal() or sigaction() ignored?

我有以下问题:当我的代码在我的 Raspberry Pi 3(使用最近的 Raspbian)上运行时,我想捕获SIGINT (以及后来的SIGTERMsignals以便进行一些清理(特别是关闭到 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM