在多线程程序中捕获 SIGINT

标签 c pthreads signals sigint

我正在编写一个多线程程序,我想在其中处理来自用户的可能的 Ctrl-C 命令以终止执行。据我所知,不能保证能够取消每个工作线程的主线程会捕获信号。因此,是否有必要为工作线程的代码设置一个不同的信号处理程序,以便任何人都能在信号到达时捕捉到它,或者是否有另一种方法可以做到这一点,只在主线程的代码中设置一个信号处理程序?

最佳答案

您可以使用 pthread_sigmask() 阻止来自调用线程的信号。

并且,由于阻塞的信号会继承到新创建的线程,您可以在主线程中阻塞 SIGINT,然后启动其他线程,然后在主线程中取消阻塞(如果需要的话)。

关于在多线程程序中捕获 SIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6250126/

相关文章:

process - SSH将信号转发到远程进程

c - 同一主干中的两个信号

c - 如何在 Linux 上用 C 获取 CPU 信息,例如内核数?

c - 将文本文件读入二维数组

c - 在 C 中使用 pthreads 时如何避免代码膨胀?

c - 多个线程接收一个信号

更改 C 函数中变量的值

c - 为什么我不能在 C 中初始化并声明指向 NULL 的指针?

C - 使用互斥锁和线程的段错误

c - 信号回调和 pthread 同步