我正在编写一个需要拦截系统信号的多线程程序(例如SIGINT)。我想知道是否有一种标准化的方式来“捕获”这些信号,如:
答案 0 :(得分:5)
确保只有一个线程接收到信号,但它也是未指定的 线程。
正确的做法是阻止除一个线程之外的所有线程上的信号,以便该线程单独处理信号处理;或者在Linux上专门阻止任何地方的线程并设置signalfd来捕获信号 - 这样,你就不会引入任何异步性,信号只会成为另外一个要读取的文件描述符。
答案 1 :(得分:1)
因为你从男人signal(7)
询问了POSIXPOSIX.1区分了指向信号的信号的概念 作为一个整体的过程和指向个人的信号 线程。 根据POSIX.1,一个过程导向信号(使用 kill(2),例如)应该由一个,任意处理 流程中选定的主题。
简而言之,这意味着将选择一个随机线程来处理信号。