linux信號處理總結
阿新 • • 發佈:2018-10-17
會話 信號 sigma 共享 pthread 指定 tstp 目標 inux SIGEGV這些),則只有產生異常的線程收到並處理。(2)pthread_kill產生的內部信號,則只有pthread_kill參數中指定的目標線程收到並處理。(3)外部使用kill命令產生的信號,通常是SIGINT、SIGHUP等job control信號,則會遍歷所有線程,直到找到一個不阻塞該信號的線程,然後調用它來處理。(一般從主線程找起),註意只有一個線程能收到。
sigaction來指定單個線程的信號處理方式。如果在某個線程中調用了sigaction處理某個信號,那麽這個進程中的未阻塞這個信號的線程在收到這個信號都會按同一種方式處理這個信號。另外,註意子線程的mask是會從主線程繼承而來的。
本文主要講解常見信號的處理方式。
Sighup:終端關閉時,發送給此會話的所有進程組。Setsid成功後不再屬於該會話,收不到該消息。
Sigterm: kill process_id時產生。
Sigpipe:向一個寫端關閉的管道寫數據,第二次寫時會收到。
一般來說,Sigtstp、sigttou、sigttin、Sighup、sigpipe sigchld可以忽略,而響應sigusr1 sigusr2 sigterm 。
多線程信號響應方式
1、每個進程都有自己的信號掩碼、信號處理函數。
2、同一進程中線程接收信號的行為:(1)異常產生的信號(比如程序錯誤,像SIGPIPE、
3、線程掩碼、信號處理行為:每個線程都有自己獨立的signal mask,但所有線程共享進程的signal action。這意味著,你可以在線程中調用pthread_sigmask(不是sigmask)來決定本線程阻塞哪些信號。但你不能調用
linux信號處理總結