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

标签 c linux multithreading signals

想象一下,我有一个具有主要功能的程序,该程序创建了多个线程。在每个线程中,我都通过CTRL + CSIGINT中断(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/

相关文章:

c++ - Boost 线程检查当前线程是否等于另一个 native 句柄

C++ 按位异或 ^ 不起作用

c - clock_gettime系统调用的clk_id有什么区别

Java用另一个对象监视一个对象

regex - sed 中的后置代码过滤器

linux - 在 Linux 中使用 WebSphere MQ 的默认 CCSID 连接到 Windows 中的客户端应用程序

c++ - 带有 Qt 的 std::thread

c - 同步ReadFile读取的字节数

c - 如何在c中获取屏幕截图

用C复制一个音频文件,如何存储?