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來指定單個線程的信號處理方式。