我正在从内核空间中的模块向进程发送信号。该进程有一个线程在等待信号。
我阅读了信号手册,上面写着: 信号处置是每个进程的属性:在多线程应用程序中,包括信号处置对于所有线程都是相同的。
因此,根据手册 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/