1-发送unix信号只能用于进程,或者也可以向线程发送信号?
2 - 是否可以将线程的tid发送到内核模块?怎么样?
3 - 内核模块以什么方式找到线程的tid,发送信号?
4 - 线程将有一个将在每个信号上运行的处理程序。如果每个处理程序对应一个信号,是否有任何竞争条件? 可以向所有线程传达信号吗?如果一次都访问处理程序会发生什么?
答案 0 :(得分:1)
Ad.1您想从哪里发送信号?您可以使用kill()
发送信号进行处理,pthread_kill()
将信号发送给线程(但只能从创建线程的进程发送)。
Ad.3。处理一个信号时,其他待处理信号将排队,因此不存在竞争条件。但是你需要将处理程序中使用的非局部变量设置为原子(因此当中断到来时设置此变量不会被中断)并检查哪些函数是处理程序安全的。
关于信号和线程 - 信号通常直接进入进程(只有pthread_kill
才能从用户空间向线程发送信号)。如果你有多线程进程并且没有任何线程阻止此信号,则信号将进入随机线程(当信号到来时正在运行的线程)。如果你阻止除了一个之外的所有线程,那么信号将仅来到这一个线程。