c - 如何在线程中等待信号?

标签 c linux multithreading kernel signals

我正在从内核空间中的模块向进程发送信号。该进程有一个线程在等待信号。

我阅读了信号手册,上面写着: 信号处置是每个进程的属性:在多线程应用程序中,包括信号处置对于所有线程都是相同的。

因此,根据手册 pthread_sigmask: http://man7.org/linux/man-pages/man3/pthread_sigmask.3.html

我试图通过调用来阻止应用程序主要功能中的信号:

siginfo_t infoh1;
sigset_t waith1;

sigemptyset(&waith1);
sigaddset(&waith1, SIG_HILO1);
pthread_sigmask( SIG_BLOCK, &waith1, NULL );

请注意线程正在其执行函数中等待它。

result = sigwaitinfo (&waith1, &infoh1);

信号已发送,但线程从未收到它(挂起等待)。

我做错了什么?我使用来自不同网站的不同代码进行了测试,但没有成功。

最佳答案

我在我的 *nix 代码中经常使用信号,我认为这不是一个好方法。

我建议所有线程都设置为忽略信号。主进程处理信号,而线程位于互斥锁/条件上。在信号上,主进程设置一个带有信号类型的全局静态标志,然后通知线程及时检查标志以查看哪个信号被捕获。

这是一种安全且简单的解决方案。

关于c - 如何在线程中等待信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326230/

相关文章:

java - Tesseract:在 Linux 远程主机中构建源代码的替代方案?

python - 如何使用Python3在pyqt5中正确锁定Qthreads

java - 基本多线程程序

c - 为什么即使输入相同,此代码也会打印不同的数字?

linux - Fortran LAPACK : high CPU %sys usage with DSYEV - no parallelization - normal?

database - 在 Linux 上安装 Oracle 数据库

c++ - 只锁定两个可能的互斥量之一

c - C 中的 "Always wrong"代码片段列表

c - valgrind 报告错误并且在使用 realloc() 时肯定会丢失

c - C语言中如何将字符串转换为整数?