我是linux新手。。
“用户空间进程”和“内核空间进程(内核线程)”是否共享同一组信号。handlers.Just 想知道内核如何根据进程运行的区域(用户空间或内核空间)以不同方式发送信号?
我认为这里可能有些混乱。当人们在 UNIX 上下文中说“内核线程”时,他们通常只是指“线程”,而不是“内核空间进程”。过去有两种线程方法:在没有内核帮助的情况下实现这一概念的库,称为用户线程;而那些主要只是包装内核提供的专门用于多线程的系统调用的那些,称为内核线程。现在大多数人都使用内核线程,特别是因为 POSIX 线程标准自 2.6 以来就已成为 Linux 内核的一部分。
为了回答你的问题,信号总是被发送到一个 PID(好吧,除非你使用 pthread_kill 进行线程间信号)。对于 POSIX 线程,一个进程的所有线程共享一个 PID。但实际上只能中断一个线程。因此,每个线程都有一个信号掩码作为其线程本地存储的一部分。实际上,您应该做的是使用 pthread_sigmask 明确说明哪些线程处理哪些信号。在 Linux 中,根线程是默认的。