常見的訊號們

2021-09-30 14:39:59 字數 3317 閱讀 4074

每個系統所支援的訊號或有所不同

可以使用 kill -l 檢視當前系統支援的訊號

kill -l

1) sighup       2) sigint       3) sigquit      4) sigill5) sigtrap      6) sigabrt      7) sigbus       8) si

gfpe

9) sigkill     10) sigusr1    11) sigse**     12) sigusr213) sigpipe     14) sigalrm     15) sigterm     16) sigstkflt

17) sigchld     18) sigcont     19) sigstop     20) sigtstp21) sigttin    22) sigttou     23) sigurg      24) sigxcpu

25) sigxfsz    26) si**talrm   27) sigprof    28) sigwinch29) sigio       30) sigpwr      31) sigsys           34) sigrtmin

35) sigrtmin+1  36) sigrtmin+2  37) sigrtmin+3  38) sigrtmin+439) sigrtmin+5  40) sigrtmin+6  41) sigrtmin+7  42) sigrtmin+8

43) sigrtmin+9  44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+1247) sigrtmin+13 48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14

51) sigrtmax-1352) sigrtmax-12 53) sigrtmax-11 54) sigrtmax-1055) sigrtmax-9  56) sigrtmax-8  57) sigrtmax-7    58) sigrtmax-6

59) sigrtmax-5  60) sigrtmax-4  61) sigrtmax-3  62) sigrtmax-263) sigrtmax-1  64) sigrtmax

編號為1 ~ 31的訊號為傳統

unix

支援的訊號,是不可靠訊號(非實時的),編號為32 ~ 63的訊號是後來擴充的,稱做可靠訊號(實時訊號)。不可靠訊號和可靠訊號的區別在於前者不支援排隊,可能會造成訊號丟失,而後者不會。

下面我們對編號小於sigrtmin的訊號進行討論。

1) sighup

試圖訪問未分配給自己的記憶體, 或試圖往沒有寫許可權的記憶體位址寫資料.

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) si**talrm

虛擬時鐘訊號. 類似於sigalrm, 但是計算的是該程序占用的cpu時間.

27) sigprof

類似於sigalrm/si**talrm, 但包括該程序用的cpu時間以及系統呼叫的時間.

28) sigwinch

視窗大小改變時發出.

29) sigio

檔案描述符準備就緒, 可以開始進行輸入/輸出操作.

30) sigpwr

power failure

31) sigsys

非法的系統呼叫。

在以上列出的訊號中,程式不可捕獲、阻塞或忽略的訊號有:sigkill,sigstop

不能恢復至預設動作的訊號有:sigill,sigtrap

缺省會導致程序流產的訊號有:sigabrt,sigbus,sigfpe,sigill,sigiot,sigquit,sigse**,sigtrap,sigxcpu,sigxfsz

缺省會導致程序退出的訊號有:sigalrm,sighup,sigint,sigkill,sigpipe,sigpoll,sigprof,sigsys,sigterm,sigusr1,sigusr2,si**talrm

缺省會導致程序停止的訊號有:sigstop,sigtstp,sigttin,sigttou

預設程序忽略的訊號有:sigchld,sigpwr,sigurg,sigwinch

此外,sigio在svr4是退出,在4.3bsd中是忽略;sigcont在程序掛起時是繼續,否則是忽略,不能被阻塞

linux中常見的訊號

sighup 終止程序 終端線路結束通話 sigint 終止程序 中斷程序 sigquit 建立core檔案終止程序,並且生成core檔案 sigill 建立core檔案 非法指令 sigtrap 建立core檔案 跟蹤自陷 sigbus 建立core檔案 匯流排錯誤 sigsegv 建立core檔...

訊號常見的介面函式

訊號是一種特別的ipc,大部分訊號是非同步的,也就是說,訊號的到來是無法預料的。訊號總共有四種響應方式 第一種 訊號的預設響應動作 就是linux系統已經規定好的 第二種 改變訊號的響應動作 第三種 訊號的忽略 第四種 訊號的阻塞 訊號的遮蔽 以下為linux的64種訊號 絕不部分訊號預設動作都是終...

常見訊號介紹

朱老師物聯網大講堂 學習筆記 核心原始碼的一些巨集定義,常見訊號,從1開始,不是0,1,sigint2 ctrl c時os給前台程序組中每個程序,2,sigabrt 6呼叫abort函式,程序異常終止,3,sigpoll 或 sigio 指示乙個非同步io事件,在高階io事件中進行,4,sigkil...