符號名 訊號值 描述 是否符合POSIX
SIGHUP 1 在控制終端上檢測到掛斷或控制線程死亡 是
SIGINT 2 互動注意訊號 是
SIGQUIT 3 互動中止訊號 是
SIGILL 4 檢測到非法硬體的指令 是
SIGTRAP 5 從陷阱中回朔 否
SIGABRT 6 異常終止訊號 是
SIGEMT 7 EMT 指令 否
SIGFPE 8 不正確的算術操作訊號 是
SIGKILL 9 終止訊號 是
SIGBUS 10 匯流排錯誤 否
SIGSEGV 11 檢測到非法的記憶體調用 是
SIGSYS 12 系統call的錯誤參數 否
SIGPIPE 13 在無讀者的管道上寫 是
SIGALRM 14 報時訊號 是
SIGTERM 15 終止訊號 是
SIGURG 16 IO通道緊急訊號 否
SIGSTOP 17 暫停訊號 是
SIGTSTP 18 互動暫停訊號 是
SIGCONT 19 如果暫停則繼續 是
SIGCHLD 20 子線程終止或暫停 是
SIGTTIN 21 後台線程組一成員試圖從控制終端上讀出 是
SIGTTOU 22 後台線程組的成員試圖寫到控制終端上 是
SIGIO 23 允許I/O訊號 否
SIGXCPU 24 超出CPU時限 否
SIGXFSZ 25 超出檔案大小限制 否
SIGVTALRM 26 虛時間警報器 否
SIGPROF 27 側面時間警報器 否
SIGWINCH 28 視窗大小的更改 否
SIGINFO 29 訊息請求 否
SIGUSR1 30 保留作為使用者自訂的訊號1 是
SIGUSR2 31 保留作為使用者自訂的訊號 是
注意:Linux訊號機制基本上是從Unix系統中繼承過來的。早期Unix系統中的訊號機制比較簡單和原始,後來在實踐中暴露出一些問題,因此,把那些建立在早期機制上的訊號叫做"不可靠訊號",訊號值小於SIGRTMIN(Red
hat 7.2中,SIGRTMIN=32,SIGRTMAX=63)的訊號都是不可靠訊號。這就是"不可靠訊號"的來源。它的主要問題是:進程每次處理訊號後,就將對訊號的響應設定為預設動作。在某些情況下,將導致對訊號的錯誤處理;因此,使用者如果不希望這樣的操作,那麼就要在訊號處理函數結尾再一次調用signal(),重新安裝該訊號。
另外,我再做一些補充,產生RST響應以至於系統發出SIGPIPE訊號,應該分為兩種情況:
1. 用戶端到服務端之間網路斷掉,或者服務端斷電等,物理串連斷掉了,這種情況下用戶端不會退出,send函數正常執行,不會感覺到自己出錯。因為由於物理網路斷開,服務端不會給用戶端回應錯誤訊息,沒有RST響應,自然也不會產生SIGPIPE訊號。但是當服務端再恢複正常的時候,對用戶端send來的訊息會產生RST響應,用戶端就收到SIGPIPE訊號了,程式退出,但是這時send函數是能夠返回
-1的。可以進行異常處理。
2.用戶端到服務端的網路能通,服務程式掛掉,用戶端程式會馬上退出,因為服務端能正常返回錯誤訊息,用戶端收到,SIGPIPE訊號就產生了。不過我不確定此時服務端返回是的RST響應,抓包來看沒有RST標誌。水平有限,唯寫到這了。