[英]How does a program handle an interruption with several threads and signals?
想象一下,我有一个带有 main 函数的程序,可以创建多个线程。 在每个线程中,我通过signal(SIGINT, functionA)
将CTRL + C
中断( SIGINT
)重定向到functionA
,在主进程中,我将相同的中断重定向到functionB
( signal(SIGINT, functionB
)。
当程序运行并发送中断SIGINT
时,程序会做什么? 它将执行functionA
中的所有线程然后functionB
的主要过程?
信号处理程序操作(SIG_IGN、SIG_DFL 或处理程序函数)是每个进程的属性,而不是每个线程的属性。
这意味着如果说不同的线程使用sigaction()来设置相同的信号操作,那么最新的一个获胜。
此外,如果您有多个不阻塞信号的线程,内核只需选择一个(基本上是随机的)用于传递信号。 也就是说,它只传递一次,而不是每个线程一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.