1. 程式人生 > >linux信號處理總結

linux信號處理總結

會話 信號 sigma 共享 pthread 指定 tstp 目標 inux

本文主要講解常見信號的處理方式。

Sighup:終端關閉時,發送給此會話的所有進程組。Setsid成功後不再屬於該會話,收不到該消息。

Sigtermkill process_id時產生。

Sigpipe:向一個寫端關閉的管道寫數據,第二次寫時會收到。

一般來說,SigtstpsigttousigttinSighupsigpipe sigchld可以忽略,而響應sigusr1 sigusr2 sigterm

多線程信號響應方式

1、每個進程都有自己的信號掩碼、信號處理函數。

2、同一進程中線程接收信號的行為:1)異常產生的信號(比如程序錯誤,像SIGPIPE

SIGEGV這些),則只有產生異常的線程收到並處理。(2pthread_kill產生的內部信號,則只有pthread_kill參數中指定的目標線程收到並處理。(3)外部使用kill命令產生的信號,通常是SIGINTSIGHUPjob control信號,則會遍歷所有線程,直到找到一個不阻塞該信號的線程,然後調用它來處理。(一般從主線程找起),註意只有一個線程能收到。

3、線程掩碼、信號處理行為:每個線程都有自己獨立signal mask,但所有線程共享進程的signal action。這意味著,你可以在線程中調用pthread_sigmask(不是sigmask)來決定本線程阻塞哪些信號。但你不能調用

sigaction來指定單個線程的信號處理方式。如果在某個線程中調用了sigaction處理某個信號,那麽這個進程中的未阻塞這個信號的線程在收到這個信號都會按同一種方式處理這個信號。另外,註意子線程的mask是會從主線程繼承而來的。

linux信號處理總結