1. 程式人生 > >linux信號解釋(2)

linux信號解釋(2)

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)