- 同一个进程中的所有线程共享一份信号处理函数(注:一个信号对应于一个信号函数,没有则调用默认的),任何线程注册信号函数都会覆写之前的信号函数。所以最终进程中的信号函数是由最后一次注册信号函数的线程决定的。
- 可以给任何线程发送信号,收到信号的线程执行相应的信号函数。由于一个进程中所有的线程共用一份信号函数(当然,一个信号对应一个信号处理函数),即使对应于当前信号的信号处理函数不是当前线程注册的,也可以顺利调用信号处理函数。
- 如果接受到信号的线程的对应信号被屏蔽,随机选用一个同一进程中的其他的没有屏蔽相应信号的线程执行信号处理函数。如果其他所有线程都屏蔽了此信号,信号将无法处理,整个进程直接退出。
- 通过kill -2 + 线程号给特定的线程发送SIGINT信号,kill -9 + 线程号直接杀死对应线程所在进程中所有的线程
- Ctl+C是发送SIGINT信号给shell当先显示的线程,一般是主线程
综上:在多线程环境下使用信号会有诸多的不确定性,所以使用信号绝对不是一个好的方案。