程序如何处理多个线程和信号的中断?

How does a program handle an interruption with several threads and signals?

假设我有一个程序,其主函数创建了多个线程。在每个线程中,我通过 signal(SIGINT, functionA)CTRL + C 中断(SIGINT)重定向到 functionA,在主进程中,我将相同的中断重定向到 functionBsignal(SIGINT, functionB).

当程序运行发送中断SIGINT时,程序会做什么? 它将在所有线程中执行 functionA 然后在主进程中执行 functionB?

信号处理程序操作(SIG_IGN、SIG_DFL 或处理函数)是每个进程 属性,而不是每个线程 属性。

这意味着如果说不同的线程使用sigaction()设置相同的信号动作,那么最新的一个获胜。

此外,如果您有多个不阻塞信号的线程,内核只需选择一个(基本上是随机的)用于传递信号。即只传递一次,不是每个线程传递一次。