想象一下,我有一个具有主要功能的程序,该程序创建了多个线程。在每个线程中,我都通过CTRL + C
将SIGINT
中断(functionA
)重定向到signal(SIGINT, functionA)
,在主进程中,我将相同的中断重定向到functionB
(signal(SIGINT, functionB
)。
当程序运行并且发送中断SIGINT
时,程序将如何处理?
它将在所有线程中执行functionA
,然后在主进程中执行functionB
吗?
最佳答案
信号处理程序操作(SIG_IGN,SIG_DFL或处理程序函数)是每个进程的属性,而不是每个线程的属性。
这意味着,如果说不同的线程使用sigaction()来设置相同的信号 Action ,则最后一个线程获胜。
此外,如果您有多个不阻塞信号的线程,则内核仅选择一个(基本上是随机地)用于传送信号。也就是说,它仅传递一次,而不是每个线程传递一次。
关于c - 程序如何处理带有多个线程和信号的中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64946267/