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