linux信號解釋(2)
阿新 • • 發佈:2018-03-02
linux信號解釋筆者學識不深,以下內容是網上摘取,以便日後使用。
信號 | 信號詳細描述 | 簡明描述 | 處理方式 |
---|---|---|---|
1) SIGHUP | 本信號在用戶終端連接(正常或非正常)結束時發出, 通常是在終端的控制進程結束時, 通知同一session內的各個作業, 這時它們與控制終端不再關聯。 | 連接掛斷 | 終止(默認處理) |
2) SIGINT | 程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發出,用於通知前臺進程組終止進程。 | 終端中斷,Ctrl+c產生該信號 | 終止(terminate) |
3) SIGQUIT | 和SIGINT類似, 但由QUIT字符(通常是Ctrl-/)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上類似於一個程序錯誤信號 | 終端退出,Ctrl+|終止+轉儲 | |
4) SIGILL | 執行了非法指令. 通常是因為可執行文件本身出現錯誤, 或者試圖執行數據段. 堆棧溢出時也有可能產生這個信號。 | 進程試圖執行非法指令 | 終止+轉儲 |
5) SIGTRAP | 由斷點指令或其它trap指令產生. 由debugger使用。 | 進入斷點 | 終止+轉儲 |
6) SIGABRT | 調用abort函數生成的信號。 | 進程異常終止,abort()產生 | 終止+轉儲 |
7) SIGBUS | 非法地址, 包括內存地址對齊(alignment)出錯。比如訪問一個四個字長的整數, 但其地址不是4的倍數。它與SIGSEGV的區別在於後者是由於對合法存儲地址的非法訪問觸發的(如訪問不屬於自己存儲空間或只讀存儲空間)。 | 硬件或對齊錯誤 | 終止+轉儲 |
8) SIGFPE | 在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢出及除數為0等其它所有的算術的錯誤。 | 浮點運算異常 | 終止+轉儲 |
9) SIGKILL | 用來立即結束程序的運行. 本信號不能被阻塞、處理和忽略。如果管理員發現某個進程終止不了,可嘗試發送這個信號。 | 不可以被捕獲或忽略的終止信號 | 終止 |
10) SIGUSR1 | 留給用戶使用 | 用戶定義信號1 | 終止 |
11) SIGSEGV | 試圖訪問未分配給自己的內存, 或試圖往沒有寫權限的內存地址寫數據. | 無效的內存段訪問=>Segmentation error | 終止 |
12) SIGUSR2 | 留給用戶使用 | 用戶定義信號2 | 終止 |
13) SIGPIPE | 管道破裂。這個信號通常在進程間通信產生,比如采用FIFO(管道)通信的兩個進程,讀管道沒打開或者意外終止就往管道寫,寫進程會收到SIGPIPE信號。此外用Socket通信的兩個進程,寫進程在寫Socket的時候,讀進程已經終止。 | 向讀端已關閉的管道寫入 | 終止 |
14) SIGALRM | 時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數使用該信號. | 真實定時器到期,alarm()產生 | 終止 |
15) SIGTERM | 程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill缺省產生這個信號。如果進程終止不了,我們才會嘗試SIGKILL。 | 可以被捕獲或忽略的終止信號 | 終止 |
16) SIGSTKFLT | 協處理器堆棧錯誤 | 協處理器棧錯誤 | 終止 |
17) SIGCHLD | 子進程結束時, 父進程會收到這個信號。 | 子進程已經停止, 對於管理子進程很有用 | 忽略 |
18) SIGCONT | 讓一個停止(stopped)的進程繼續執行. 本信號不能被阻塞. 可以用一個handler來讓程序在由stopped狀態變為繼續執行時完成特定的工作. 例如, 重新顯示提示符 | 繼續執行暫停進程(用戶一般不用) | 忽略 |
19) SIGSTOP | 停止(stopped)進程的執行. 註意它和terminate以及interrupt的區別:該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略. | 不能被捕獲或忽略的停止信號 | 停止 |
20) SIGTSTP | 停止進程的運行, 但該信號可以被處理和忽略. 用戶鍵入SUSP字符時(通常是Ctrl-Z)發出這個信號 | 終端掛起,用戶產生停止符(Ctrl+Z) | 停止 |
21) SIGTTIN | 當後臺作業要從用戶終端讀數據時, 該作業中的所有進程會收到SIGTTIN信號. 缺省時這些進程會停止執行. | 後臺進程讀控制終端 | 停止 |
22) SIGTTOU | 類似於SIGTTIN, 但在寫終端(或修改終端模式)時收到. | 後臺進程寫控制終端 | 停止 |
23) SIGURG | 有"緊急"數據或out-of-band數據到達socket時產生. | 緊急I/O未處理 | 忽略 |
24) SIGXCPU | 超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。 | 進程資源超限 | 終止+轉儲 |
25) SIGXFSZ | 當進程企圖擴大文件以至於超過文件大小資源限制。 | 文件資源超限 | 終止+轉儲 |
26) SIGVTALRM | 虛擬時鐘信號. 類似於SIGALRM, 但是計算的是該進程占用的CPU時間. | 虛擬定時器到期 | 終止 |
27) SIGPROF | 類似於SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統調用的時間. | 實用定時器到期 | 終止 |
28) SIGWINCH | 窗口大小改變時發出. | 控制終端窗口大小改變 | 忽略 |
29) SIGIO | 文件描述符準備就緒, 可以開始進行輸入/輸出操作. | 異步I/O事件 | 終止 |
30) SIGPWR | Power failure | 斷電 | 終止 |
31) SIGSYS | 非法的系統調用。 | 進程試圖執行無效系統調用 | 終止+轉儲 |
信號這麽多,其實主要記住常用的幾個信號就好。
信號 | 信號說明 |
---|---|
SIGINT | Ctrl-C終端下產生 |
SIGABRT | 產生SIGABRT信號 |
SIGALRM | 由定時器如alarm() |
SIGCHLD | 子進程結束後向父進程發送 |
SIGBUS | 總線錯誤 |
SIGKILL | 必殺信號 |
SIGPIPE | 管道斷裂 |
SIGIO | 使用fcntl註冊I/O事件 |
SIGQUIT | 在終端下Ctrl-\產生 |
SIGSEGV | 對內存無效的訪問導致即常見的“段錯誤” 終止當前進程 |
SIGSTOP | 必停信號,不能被阻塞,不能被捕捉 |
SIGTERM | 終止進程的標準信號 |
linux信號解釋(2)