天天看點

Linux——信号清單

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函數生成的信号。

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。

16

17

SIGCHLD

子程序結束時, 父程序會收到這個信号。

18

SIGCONT

讓一個停止(stopped)的程序繼續執行. 本信号不能被阻塞. 可以用一個handler來讓程式在由stopped狀态變為繼續執行時完成特定的工作. 例如, 重新顯示提示符

19

SIGSTOP

停止(stopped)程序的執行. 注意它和terminate以及interrupt的差別:該程序還未結束, 隻是暫停執行. 本信号不能被阻塞, 處理或忽略.

20

SIGTSTP

停止程序的運作, 但該信号可以被處理和忽略. 使用者鍵入SUSP字元時(通常是Ctrl-Z)發出這個信号

  Linux支援的信号清單如下。很多信号是與機器的體系結構相關的,首先列出的是POSIX.1中列出的信号: 

        信号 值 處理動作 發出信号的原因

        ----------------------------------------------------------------------

        SIGHUP 1 A 終端挂起或者控制程序終止

        SIGINT 2 A 鍵盤中斷(如break鍵被按下)

        SIGQUIT 3 C 鍵盤的退出鍵被按下

        SIGILL 4 C 非法指令

        SIGABRT 6 C 由abort(3)發出的退出指令

        SIGFPE 8 C 浮點異常

        SIGKILL 9 AEF Kill信号

        SIGSEGV 11 C 無效的記憶體引用

        SIGPIPE 13 A 管道破裂: 寫一個沒有讀端口的管道

        SIGALRM 14 A 由alarm(2)發出的信号

        SIGTERM 15 A 終止信号 網管bitscn_com

        SIGUSR1 30,10,16 A 使用者自定義信号1

        SIGUSR2 31,12,17 A 使用者自定義信号2

        SIGCHLD 20,17,18 B 子程序結束信号

        SIGCONT 19,18,25 程序繼續(曾被停止的程序)

        SIGSTOP 17,19,23 DEF 終止程序

        SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵

        SIGTTIN 21,21,26 D 背景程序企圖從控制終端讀

        SIGTTOU 22,22,27 D 背景程序企圖從控制終端寫

        下面的信号沒在POSIX.1中列出,而在SUSv2列出

        信号 值 處理動作 發出信号的原因

        --------------------------------------------------------------------

        SIGBUS 10,7,10 C 總線錯誤(錯誤的記憶體通路)

        SIGPOLL A Sys V定義的Pollable事件,與SIGIO同義

        SIGPROF 27,27,29 A Profiling定時器到

        SIGSYS 12,-,12 C 無效的系統調用 (SVID)

        SIGTRAP 5 C 跟蹤/斷點捕獲

        SIGURG 16,23,21 B Socket出現緊急條件(4.2 BSD)

        SIGVTALRM 26,26,28 A 實際時間報警時鐘信号(4.2 BSD)

        SIGXCPU 24,24,30 C 超出設定的CPU時間限制(4.2 BSD)

        SIGXFSZ 25,25,31 C 超出設定的檔案大小限制(4.2 BSD)

        (對于SIGSYS,SIGXCPU,SIGXFSZ,以及某些機器體系結構下的SIGBUS,Linux預設的動作是A (terminate),SUSv2 是C (terminate and dump core))。  

      下面是其它的一些信号

        信号 值 處理動作 發出信号的原因

        ----------------------------------------------------------------------

        SIGIOT 6 C IO捕獲指令,與SIGABRT同義

        SIGEMT 7,-,7

        SIGSTKFLT -,16,- A 協處理器堆棧錯誤

        SIGIO 23,29,22 A 某I/O操作現在可以進行了(4.2 BSD)

        SIGCLD -,-,18 A 與SIGCHLD同義

        SIGPWR 29,30,19 A 電源故障(System V)

        SIGINFO 29,-,- A 與SIGPWR同義

        SIGLOST -,-,- A 檔案鎖丢失

        SIGWINCH 28,28,20 B 視窗大小改變(4.3 BSD, Sun)

        SIGUNUSED -,31,- A 未使用的信号(will be SIGSYS)

        (在這裡,- 表示信号沒有實作;有三個值給出的含義為,第一個值通常在Alpha和Sparc上有效,中間的值對應i386和ppc以及sh,最後一個值對應 mips。信号29在Alpha上為SIGINFO / SIGPWR ,在Sparc上為SIGLOST。) 

        處理動作一項中的字母含義如下

        A 預設的動作是終止程序

        B 預設的動作是忽略此信号

        C 預設的動作是終止程序并進行核心映像轉儲(dump core)

        D 預設的動作是停止程序

        E 信号不能被捕獲

        F 信号不能被忽略

        上 面介紹的信号是常見系統所支援的。以表格的形式介紹了各種信号的名稱、作用及其在預設情況下的處理動作。各種預設處理動作的含義是:終止程式是指程序退 出;忽略該信号是将該信号丢棄,不做處理;停止程式是指程式挂起,進入停止狀況以後還能重新進行下去,一般是在調試的過程中(例如ptrace系統調 用);核心映像轉儲是指将程序資料在記憶體的映像和程序在核心結構中存儲的部分内容以一定格式轉儲到檔案系統,并且程序退出執行,這樣做的好處是為程式員提 供了友善,使得他們可以得到程序當時執行時的資料值,允許他們确定轉儲的原因,并且可以調試他們的程式。

        注意 信号SIGKILL和SIGSTOP既不能被捕捉,也不能被忽略。信号SIGIOT與SIGABRT是一個信号。可以看出,同一個信号在不同的系統中值可能不一樣,是以建議最好使用為信号定義的名字,而不要直接使用信号的值。

繼續閱讀