linux多线程的信号处理

3条原则:
1:如果是异常产生的信号(比如程序错误,像SIGPIPE、SIGEGV这些),则只有产生异常的线程收到并处理
2:如果是用pthread_kill产生的内部信号,则只有pthread_kill参数中指定的目标线程收到并处理。
3:如果是外部使用kill命令产生的信号,通常是SIGINT、SIGHUP等job control信号,则会遍历所有线程,直到找到一个不阻塞该信号的线程,然后调用它来处理。(一般从主线程找起),注意只有一个线程能收到。

重点:每个线程都有自己独立的signal mask,但所有线程共享进程的signal action。详解如下:
1:子线程的signal mask是会从主线程继承而来的,可以在线程中调用pthread_sigmask来修改本线程阻塞哪些信号。
2:signal action只有一份 共享的 不能调用sigaction来指定单个线程的信号处理方式。

来源:https://www.cnblogs.com/coding-my-life/p/4782529.html

你可能感兴趣的:(linux多线程的信号处理)