1. 程式人生 > >linux 遭遇SIGPIPE訊號,導致程序退出的問題

linux 遭遇SIGPIPE訊號,導致程序退出的問題

對於產生訊號,我們可以在產生訊號前利用方法 signal(int signum, sighandler_t handler) 設定訊號的處理。如果沒有呼叫此方法,系統就會呼叫預設處理方法:中止程式,顯示提示資訊(就是我們經常遇到的問題)。我們可以呼叫系統的處理方法,也可以自定義處理方法。 

系統裡邊定義了三種處理方法: 
(1)SIG_DFL訊號專用的預設動作:
  (a)如果預設動作是暫停執行緒,則該執行緒的執行被暫時掛起。當執行緒暫停期間,傳送給執行緒的任何附加訊號都不交付,直到該執行緒開始執行,但是SIGKILL除外。
  (b)把掛起訊號的訊號動作設定成SIG_DFL,且其預設動作是忽略訊號 (SIGCHLD)。
(2)SIG_IGN忽略訊號

  (a)該訊號的交付對執行緒沒有影響
  (b)系統不允許把SIGKILL或SIGTOP訊號的動作設定為SIG_DFL
3)SIG_ERR   

專案中我呼叫了signal(SIGPIPESIG_IGN), 這樣產生  SIGPIPE 訊號時就不會中止程式,直接把這個訊號忽略掉。