1. 概念 按照 POSIX, 异步 (外部) 信号发送到整个进程. 所有线程共享同一个设置, 即通过 sigaction 设置的线程处置方法. 每个线程有自己的信号掩码, 线程库根据该掩码决定将信号发送到哪个线程. 由于Linux 线程实现上的独特性, 外部信号始终发送到特定的线程. 2. 例子 #include <pthread.h> #include <stdio.h> #include <sys/signal.h> #define NUMTHREADS 3 void sighand(int signo); void *threadfunc(void *parm) { pthread_t tid = pthread_self(); int rc; printf("Thread %u entered/n", tid); rc = sleep(30); /* 若有信号中断则返回剩余秒数 */ printf("Thread %u did not get expected results! rc=%d/n", tid, rc); return NULL; } void *threadmasked(void *parm) { pthread_t tid = pthread_self(); sigset_t mask; int rc; printf("Masked thread %lu entered/n", tid); sigfillset(&mask); /* 将所有信号加入mask信号集 */ /* 向当前的信号掩码中添加mask信号集 */ rc = pthread_sigmask(SIG_BLOCK, &mask, NULL); if (rc != 0) { printf("%d, %s/n", rc, strerror(rc)); return NULL; } rc = sleep(15); if (rc != 0) { printf("Masked thread %lu did not get expected results! rc=%d /n", tid, rc); return NULL; } printf("Masked thread %lu completed masked work/n", tid); return NULL; } int main(int argc, char **argv) {