Linux的訊號的分析使用

2021-08-18 19:36:05 字數 3703 閱讀 4315

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

16) sigstkflt 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, 終端按鍵產生訊號
ø ctrl + c  → 2) sigint(終止/中斷)     "int" ----interrupt

ø ctrl + \ → 3) sigquit(退出)

ø ctrl + z → 20) sigtstp(暫停/停止) "t" ----terminal 終端。

2, 硬體異常產生訊號
ø 匯流排錯誤      → 7) sigbus

ø 除0操作 → 8) sigfpe (浮點數例外) "f" -----float 浮點數。

ø 非法訪問記憶體 → 11) sigsegv (段錯誤)

3, linux常規訊號一覽表

其中 2(sigint), 3(sigquit), 6(sigabrt), 9(sigkill), 11(sigsegv), 14(sigalrm), 17(sigchld), 19(sigstop), 20(sigtstp)訊號要記住

編號訊號

對應事件

預設動作

1sighup

使用者退出shell時,由該shell啟動的所有程序將收到這個訊號

終止程序

2sigint

當使用者按下了組合鍵時,使用者終端向正在執行中的由該終端啟動的程式發出此訊號

終止程序

3sigquit

使用者按下組合鍵時產生該訊號,使用者終端向正在執行中的由該終端啟動的程式發出些訊號

終止程序

4sigill

cpu檢測到某程序執行了非法指令

終止程序並產生core檔案

5sigtrap

該訊號由斷點指令或其他 trap指令產生

終止程序並產生core檔案

6sigabrt

呼叫abort函式時產生該訊號

終止程序並產生core檔案

7sigbus

非法訪問記憶體位址,包括記憶體對齊出錯

終止程序並產生core檔案

8sigfpe

在發生致命的運算錯誤時發出。不僅包括浮點運算錯誤,還包括溢位及除數為0等所有的演算法錯誤

終止程序並產生core檔案

9sigkill

無條件終止程序。本訊號不能被忽略,處理和阻塞

終止程序,可以殺死任何程序

10siguse1

使用者定義 的訊號。即程式設計師可以在程式中定義並使用該訊號

終止程序

11sigsegv

指示程序進行了無效記憶體訪問(段錯誤)

終止程序並產生core檔案

12sigusr2

另外乙個使用者自定義訊號,程式設計師可以在程式中定義並使用該訊號

終止程序

13sigpipe

broken pipe向乙個沒有讀端的管道寫資料

終止程序

14sigalrm

定時器超時,超時的時間 由系統呼叫alarm設定

終止程序

15sigterm

程式結束訊號,與sigkill不同的是,該訊號可以被阻塞和終止。通常用來要示程式正常退出。執行shell命令kill時,預設產生這個訊號

終止程序

16sigstkflt

linux早期版本出現的訊號,

現仍保留向後相容

17sigchld

子程序結束時,父程序會收到這個訊號

忽略這個訊號

18sigcont

如果程序已停止,則使其繼續執行

繼續/忽略。

19sigstop

停止程序的執行。訊號不能被忽略,處理和阻塞

為終止程序

20sigtstp

停止終端互動程序的執行。按下組合鍵時發出這個訊號

暫停程序

21sigttin

後台程序讀終端控制台

暫停程序

22sigttou

該訊號類似於sigttin,在後台程序要向終端輸出資料時發生

暫停程序

23sigurg

套接字上有緊急資料時,向當前正在執行的程序發出些訊號,報告有緊急資料到達。如網路帶外資料到達

忽略該訊號

24sigxcpu

程序執行時間超過了分配給該程序的cpu時間 ,系統產生該訊號並傳送給該程序

終止程序

25sigxfsz

超過檔案的最大長度設定

終止程序

26sigvtalrm

虛擬時鐘超時時產生該訊號。類似於sigalrm,但是該訊號只計算該程序占用cpu的使用時間

終止程序

27sgiprof

類似於sigvtalrm,它不公包括該程序占用cpu時間還包括執行系統呼叫時間

終止程序

28sigwinch

視窗變化大小時發出

忽略該訊號

29sigio

此訊號向程序指示發出了乙個非同步io事件

忽略該訊號

30sigpwr

關機終止程序

31sigsys

無效的系統呼叫

終止程序並產生core檔案

34~64

sigrtmin ~ sigrtmax

linux的實時訊號,它們沒有固定的含義(可以由使用者自定義)

終止程序

函式的原型:

#include typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

linux 訊號的使用

linux環境下c程式設計指南 楊樹青 王歡 如要執行乙個需要花費較長時間的大型科學計算程式,在程式執行過程中,希望能隨時了解程式執行的狀態,可以使用兩種不同的方法。一是在程式的迴圈體中加入一些判斷,輸出之類的語句。這種方法將會使程式的 增加,儘管一次操作所需時間不長,但當程式要迴圈很多次時,其耗費...

Linux 程序通訊 訊號的使用

訊號概念 訊號 signal 是linux程序間通訊的一種機制,全稱為軟中斷訊號,也被稱為軟中斷。訊號本質上是在軟體層次上 對硬體中斷機制的一種模擬。訊號由核心管理 產生的方式 可以由核心自身產生,比如出現 硬體錯誤 記憶體讀取錯誤,分母為0的除法等,核心需要通知相應程序。也可以由其他程序產生並傳送...

Linux下訊號的簡單使用

1,1個main,包含2個while,不要被兩個while中的sleep所迷惑,這裡只有main 這乙個主線程 程序 在執行,程式會按照自上而下順序執行。遇到第1個while迴圈中的sleep時,本執行緒暫停執行,交給其它執行緒處理,但是因為該程序只有乙個執行緒,所以只有靜靜的sleep到指定時間 ...