-
每一个线程可以向别的线程发送信号,pthread_kill() 函数用来完成这一操作
-
每一个线程可以设置自己的信号阻塞集合,pthread_sigmask() 函数用来完成这一操作(类似于进程的 sigprocmask() 函数)
-
每个线程可以设置针对某信号处理的方式,但同一进程中对某信号的处理方式只能有一个有效,即最后一次设置的处理方式
-
如果别的进程向当前进程中发送一个信号,由哪个线程处理是未知的
-
发送信号
-
函数名:pthread_kill
-
函数声明:
extern int pthread_kill(pthread_t threadld, int signo);
-
threadld:接收信号的线程
-
signo:信号。如果等于 0,则进行错误检测而不发送信号
-
返回值:发送信号成返回 0,错误返回 -1
-
-
-
设置信号阻塞集合
-
函数名:pthread_sigmask
-
函数调用:
extern int pthread_sigmask(int __how, __const__sigset_t *__restrict__newmask, __sigset_t *__restrict__oldmask);
-
how:定义了如何更改调用线程的信号掩码,其合法值包括:
// 将第 2 个参数所描述的集合添加到当前进程阻塞的信号集中 #define SIG_BLOCK 0 /* for blocking signals */ // 将第 2 个参数锁描述的集合从当前进程阻塞的信号集中删除 #define SIG_UNBLOCK 1 /* for unblocking signals */ // 无论之前的阻塞信号,设置当前进程阻塞的集合为第 2 个参数描述的对象 #define SIG_SETMASK 2 /* for setting the signal mask */
-
如果 set 是空指针,则参数 how 的值没有意义,且不会更改线程的阻塞信号集,因此该调用可用于查询当前受阻塞的信号
-
-
- End -