线程和系统信号

Zag*_*ghp 0 c c++ posix signals

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

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

Ker*_* SB 5

保证恰好一个线程接收到信号,但也未指定哪个线程.

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