信号与执行上下文
-
执行过程中由系统生成的同步信号 : SIGPIPE SIGSEGV SIGPIPE
信号会在产生异常的线程的上下文中执行 -
pthread_kill发送的同步信号
信号会在pthread_kill指定的线程的上下文中执行 -
其它进程发送来的异步信号 : SIGALARM SIGHUP SIGINT SIGKILL
系统会随机选择一个线程处理信号,处理结果会影响所有线程
信号处理的方法
-
sigaction
sigaction可以注册用户自定义的信号处理函数。要注意的是在信号处理函数中使用多线程的同步相关的函数,结果是为定义的,所以要慎重。 -
pthread_sigmask将信号阻塞,然后用sigwait在一个单独的线程中处理。
示例代码
github: https://github.com/wartalker/c-small-programe/tree/master/mt-signal