我正在从内核空间中的模块向进程发送信号。这个过程有一个线程在等待信号。
我阅读了信号手册并说: 信号处理是一个每进程属性:在多线程应用程序中,包括信号的处置对于所有线程都是相同的。
因此,根据手册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);
信号被发送,但是线程从未接收到它(它挂起等待)。
我做错了什么?我使用不同网站的不同代码进行了测试,但没有成功。
答案 0 :(得分:2)
我在* nix代码中使用了很多信号,我认为这不是一个好方法。
我建议将所有线程设置为忽略信号。当线程处于互斥/条件时,主进程处理信号。在信号上,主进程设置具有信号类型的全局静态标志,然后通知正确检查该标志的线程以查看捕获的信号。
这是一个安全而简单的解决方案。