經常使用SIG信號及其鍵值

01 SIGHUP 掛起(hangup)
02 SIGINT 中斷,當用戶從鍵盤按^c鍵或^break鍵時
03 SIGQUIT 退出,當用戶從鍵盤按quit鍵時
04 SIGILL 非法指令
05 SIGTRAP 跟蹤陷阱(trace trap),啓動進程,跟蹤代碼的執行
06 SIGIOT IOT指令
07 SIGEMT EMT指令
08 SIGFPE 浮點運算溢出
09 SIGKILL 殺死、終止進程 
10 SIGBUS 總線錯誤
11 SIGSEGV 段違例(segmentation  violation),進程試圖去訪問其虛地址空間之外的位置
12 SIGSYS 系統調用中參數錯,如系統調用號非法
13 SIGPIPE 向某個非讀管道中寫入數據
14 SIGALRM 鬧鐘。當某進程但願在某時間後接收信號時發此信號
15 SIGTERM 軟件終止(software  termination)
16 SIGUSR1 用戶自定義信號1
17 SIGUSR2 用戶自定義信號2
18 SIGCLD 某個子進程死
19 SIGPWR 電源故障shell

kill -l 
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 
64) SIGRTMAX 
列表中,編號爲1 ~ 31的信號爲傳統UNIX支持的信號,是不可靠信號(非實時的),編號爲32 ~ 63的信號是後來擴充的,稱作可靠信號(實時信號)。不可靠信號和可靠信號的區別在於前者不支持排隊,可能會形成信號丟失,然後者不會。 
下面咱們對編號小於SIGRTMIN的信號進行討論。 
1) SIGHUP 
本信號在用戶終端鏈接(正常或非正常)結束時發出, 一般是在終端的控制進程結束時, 通知同一session內的各個做業, 這時它們與控制終端再也不關聯。 
登陸Linux時,系統會分配給登陸用戶一個終端(Session)。在這個終端運行的全部程序,包括前臺進程組和後臺進程組,通常都屬於這個 Session。當用戶退出Linux登陸時,前臺進程組和後臺有對終端輸出的進程將會收到SIGHUP信號。這個信號的默認操做爲終止進程,所以前臺進 程組和後臺有終端輸出的進程就會停止。不過能夠捕獲這個信號,好比wget能捕獲SIGHUP信號,並忽略它,這樣就算退出了Linux登陸,wget也 能繼續下載。 
此外,對於與終端脫離關係的守護進程,這個信號用於通知它從新讀取配置文件。 
2) SIGINT 
程序終止(interrupt)信號, 在用戶鍵入INTR字符(一般是Ctrl-C)時發出,用於通知前臺進程組終止進程。 
3) SIGQUIT 
和SIGINT相似, 但由QUIT字符(一般是Ctrl-)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上相似於一個程序錯誤信號。 
4) SIGILL 
執行了非法指令. 一般是由於可執行文件自己出現錯誤, 或者試圖執行數據段. 堆棧溢出時也有可能產生這個信號。 
5) SIGTRAP 
由斷點指令或其它trap指令產生. 由debugger使用。 
6) SIGABRT 
調用abort函數生成的信號。 
7) SIGBUS 
非法地址, 包括內存地址對齊(alignment)出錯。好比訪問一個四個字長的整數, 但其地址不是4的倍數。它與SIGSEGV的區別在於後者是因爲對合法存儲地址的非法訪問觸發的(如訪問不屬於本身存儲空間或只讀存儲空間)。 
8) SIGFPE 
在發生致命的算術運算錯誤時發出. 不只包括浮點運算錯誤, 還包括溢出及除數爲0等其它全部的算術的錯誤。 
9) SIGKILL 
用來當即結束程序的運行. 本信號不能被阻塞、處理和忽略。若是管理員發現某個進程終止不了,可嘗試發送這個信號。 
10) SIGUSR1 
留給用戶使用 
11) SIGSEGV 
試圖訪問未分配給本身的內存, 或試圖往沒有寫權限的內存地址寫數據. 
12) SIGUSR2 
留給用戶使用 
13) SIGPIPE 
管道破裂。這個信號一般在進程間通訊產生,好比採用FIFO(管道)通訊的兩個進程,讀管道沒打開或者意外終止就往管道寫,寫進程會收到SIGPIPE信號。此外用Socket通訊的兩個進程,寫進程在寫Socket的時候,讀進程已經終止。 
14) SIGALRM 
時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數使用該信號. 
15) SIGTERM 
程序結束(terminate)信號, 與SIGKILL不一樣的是該信號能夠被阻塞和處理。一般用來要求程序本身正常退出,shell命令kill缺省產生這個信號。若是進程終止不了,咱們纔會嘗試SIGKILL。 
17) SIGCHLD 
子進程結束時, 父進程會收到這個信號。 
若是父進程沒有處理這個信號,也沒有等待(wait)子進程,子進程雖然終止,可是還會在內核進程表中佔有表項,這時的子進程稱爲殭屍進程。這種情 況咱們應該避免(父進程或者忽略SIGCHILD信號,或者捕捉它,或者wait它派生的子進程,或者父進程先終止,這時子進程的終止自動由init進程 來接管)。 
18) SIGCONT 
讓一箇中止(stopped)的進程繼續執行. 本信號不能被阻塞. 能夠用一個handler來讓程序在由stopped狀態變爲繼續執行時完成特定的工做. 例如, 從新顯示提示符 
19) SIGSTOP 
中止(stopped)進程的執行. 注意它和terminate以及interrupt的區別:該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略. 
20) SIGTSTP 
中止進程的運行, 但該信號能夠被處理和忽略. 用戶鍵入SUSP字符時(一般是Ctrl-Z)發出這個信號 
21) SIGTTIN 
當後臺做業要從用戶終端讀數據時, 該做業中的全部進程會收到SIGTTIN信號. 缺省時這些進程會中止執行. 
22) SIGTTOU 
相似於SIGTTIN, 但在寫終端(或修改終端模式)時收到. 
23) SIGURG 
有」緊急」數據或out-of-band數據到達socket時產生. 
24) SIGXCPU 
超過CPU時間資源限制. 這個限制能夠由getrlimit/setrlimit來讀取/改變。 
25) SIGXFSZ 
當進程企圖擴大文件以致於超過文件大小資源限制。 
26) SIGVTALRM 
虛擬時鐘信號. 相似於SIGALRM, 可是計算的是該進程佔用的CPU時間. 
27) SIGPROF 
相似於SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統調用的時間. 
28) SIGWINCH 
窗口大小改變時發出. 
29) SIGIO 
文件描述符準備就緒, 能夠開始進行輸入/輸出操做. 
30) SIGPWR 
Power failure 
31) SIGSYS 
非法的系統調用。 
在以上列出的信號中,程序不可捕獲、阻塞或忽略的信號有:SIGKILL,SIGSTOP 
不能恢復至默認動做的信號有:SIGILL,SIGTRAP 
默認會致使進程流產的信號有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ 
默認會致使進程退出的信號有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM 
默認會致使進程中止的信號有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU 
默認進程忽略的信號有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH 
此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在進程掛起時是繼續,不然是忽略,不能被阻塞。session

如下是其它網友的補充:socket

SIGHUP 終止進程 終端線路掛斷 
SIGINT 終止進程 中斷進程 
SIGQUIT 創建CORE文件終止進程,而且生成core文件 
SIGILL 創建CORE文件 非法指令 
SIGTRAP 創建CORE文件 跟蹤自陷 
SIGBUS 創建CORE文件 總線錯誤 
SIGSEGV 創建CORE文件 段非法錯誤 
SIGFPE 創建CORE文件 浮點異常 
SIGIOT 創建CORE文件 執行I/O自陷 
SIGKILL 終止進程 殺死進程 
SIGPIPE 終止進程 向一個沒有讀進程的管道寫數據 
SIGALARM 終止進程 計時器到時 
SIGTERM 終止進程 軟件終止信號 
SIGSTOP 中止進程 非終端來的中止信號 
SIGTSTP 中止進程 終端來的中止信號 
SIGCONT 忽略信號 繼續執行一箇中止的進程 
SIGURG 忽略信號 I/O緊急信號 
SIGIO 忽略信號 描述符上能夠進行I/O 
SIGCHLD 忽略信號 當子進程中止或退出時通知父進程 
SIGTTOU 中止進程 後臺進程寫終端 
SIGTTIN 中止進程 後臺進程讀終端 
SIGXGPU 終止進程 CPU時限超時 
SIGXFSZ 終止進程 文件長度過長 
SIGWINCH 忽略信號 窗口大小發生變化 
SIGPROF 終止進程 統計分佈圖用計時器到時 
SIGUSR1 終止進程 用戶定義信號1 
SIGUSR2 終止進程 用戶定義信號2 
SIGVTALRM 終止進程 虛擬計時器到時 
1) SIGHUP 本信號在用戶終端鏈接(正常或非正常)結束時發出, 一般是在終端的控 
制進程結束時, 通知同一session內的各個做業, 這時它們與控制終端 
再也不關聯. 
2) SIGINT 程序終止(interrupt)信號, 在用戶鍵入INTR字符(一般是Ctrl-C)時發出 
3) SIGQUIT 和SIGINT相似, 但由QUIT字符(一般是Ctrl-)來控制. 進程在因收到 
SIGQUIT退出時會產生core文件, 在這個意義上相似於一個程序錯誤信 
號. 
4) SIGILL 執行了非法指令. 一般是由於可執行文件自己出現錯誤, 或者試圖執行 
數據段. 堆棧溢出時也有可能產生這個信號. 
5) SIGTRAP 由斷點指令或其它trap指令產生. 由debugger使用. 
6) SIGABRT 程序本身發現錯誤並調用abort時產生. 
6) SIGIOT 在PDP-11上由iot指令產生, 在其它機器上和SIGABRT同樣. 
7) SIGBUS 非法地址, 包括內存地址對齊(alignment)出錯. eg: 訪問一個四個字長 
的整數, 但其地址不是4的倍數. 
8) SIGFPE 在發生致命的算術運算錯誤時發出. 不只包括浮點運算錯誤, 還包括溢 
出及除數爲0等其它全部的算術的錯誤. 
9) SIGKILL 用來當即結束程序的運行. 本信號不能被阻塞, 處理和忽略. 
10) SIGUSR1 留給用戶使用 
11) SIGSEGV 試圖訪問未分配給本身的內存, 或試圖往沒有寫權限的內存地址寫數據. 
12) SIGUSR2 留給用戶使用 
13) SIGPIPE Broken pipe 
14) SIGALRM 時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數使用該 
信號. 
15) SIGTERM 程序結束(terminate)信號, 與SIGKILL不一樣的是該信號能夠被阻塞和 
處理. 一般用來要求程序本身正常退出. shell命令kill缺省產生這 
個信號. 
17) SIGCHLD 子進程結束時, 父進程會收到這個信號. 
18) SIGCONT 讓一箇中止(stopped)的進程繼續執行. 本信號不能被阻塞. 能夠用 
一個handler來讓程序在由stopped狀態變爲繼續執行時完成特定的 
工做. 例如, 從新顯示提示符 
19) SIGSTOP 中止(stopped)進程的執行. 注意它和terminate以及interrupt的區別: 
該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略. 
20) SIGTSTP 中止進程的運行, 但該信號能夠被處理和忽略. 用戶鍵入SUSP字符時 
(一般是Ctrl-Z)發出這個信號 
21) SIGTTIN 當後臺做業要從用戶終端讀數據時, 該做業中的全部進程會收到SIGTTIN 
信號. 缺省時這些進程會中止執行. 
22) SIGTTOU 相似於SIGTTIN, 但在寫終端(或修改終端模式)時收到. 
23) SIGURG 有」緊急」數據或out-of-band數據到達socket時產生. 
24) SIGXCPU 超過CPU時間資源限制. 這個限制能夠由getrlimit/setrlimit來讀取/ 
改變 
25) SIGXFSZ 超過文件大小資源限制. 
26) SIGVTALRM 虛擬時鐘信號. 相似於SIGALRM, 可是計算的是該進程佔用的CPU時間. 
27) SIGPROF 相似於SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統調用的 
時間. 
28) SIGWINCH 窗口大小改變時發出. 
29) SIGIO 文件描述符準備就緒, 能夠開始進行輸入/輸出操做. 
30) SIGPWR Power failure 
有 兩個信號能夠中止進程:SIGTERM和SIGKILL。 SIGTERM比較友好,進程能捕捉這個信號,根據您的須要來關閉程序。在關閉程序以前,您能夠結束打開的記錄文件和完成正在作的任務。在某些狀況下,假 如進程正在進行做業並且不能中斷,那麼進程能夠忽略這個SIGTERM信號。 
對於SIGKILL信號,進程是不能忽略的。這是一個 「我無論您在作什麼,馬上中止」的信號。假如您發送SIGKILL信號給進程,Linux就將進程中止在那裏函數

相關文章
相關標籤/搜索