线程和系统信号

时间:2012-11-07 12:30:57

标签: c++ c signals posix

我正在编写一个需要拦截系统信号的多线程程序(例如SIGINT)。我想知道是否有一种标准化的方式来“捕获”这些信号,如:

  • 发送信号,任何线程可以接收它还是只接收主()一个?
  • 是否有Posix规则或编程习惯用法指定如何处理此问题?

2 个答案:

答案 0 :(得分:5)

确保只有一个线程接收到信号,但它也是未指定的 线程。

正确的做法是阻止除一个线程之外的所有线程上的信号,以便该线程单独处理信号处理;或者在Linux上专门阻止任何地方的线程并设置signalfd来捕获信号 - 这样,你就不会引入任何异步性,信号只会成为另外一个要读取的文件描述符。

答案 1 :(得分:1)

因为你从男人signal(7)

询问了POSIX
  

POSIX.1区分了指向信号的信号的概念   作为一个整体的过程和指向个人的信号   线程。 根据POSIX.1,一个过程导向信号(使用   kill(2),例如)应该由一个,任意处理   流程中选定的主题

简而言之,这意味着将选择一个随机线程来处理信号。