電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 30|回復(fù): 0
收起左側(cè)

嵌入式Linux:常見信號的默認行為

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

四級會員

Rank: 4

積分
3385
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-8-23 12:03:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

9 g0 n  }, T' y點擊上方藍色字體,關(guān)注我們1 X1 i' C2 C7 P& s
信號是一種軟件中斷,用于通知進程發(fā)生了某種異步事件。信號可以由用戶、其他進程或操作系統(tǒng)內(nèi)核產(chǎn)生。進程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統(tǒng)執(zhí)行默認操作。0 D2 i4 i! _* L: f, ^
2 y6 B% _7 I# f- o3 e
  S1 k2 y1 \3 u" |
; G# z) p: S' W4 |9 R, T) P
  • 不可靠信號(非實時信號):編號為 1~31 的信號。它們的行為可能因?qū)崿F(xiàn)而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內(nèi)連續(xù)到達,它們可能會合并成一個信號。
  • 可靠信號(實時信號):編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統(tǒng)上都是相同的?煽啃盘柌粫喜ⅲ词顾鼈冊诙虝r間內(nèi)連續(xù)到達?煽啃盘栔С峙抨,這意味著如果一個可靠信號被阻塞,它將被存儲在隊列中,直到信號處理程序準(zhǔn)備就緒。
    ( }# y" N9 y7 R6 h3 G2 q6 G& \
    : K+ `* I- r8 v' w6 I9 ]
    常見信號的用途和系統(tǒng)默認操作如下:
    . o5 P( y$ G- l% c7 P
    % \  E' G3 {4 @* ]' M4 t# ^ 0 B5 m/ c9 b. M9 p

    9 N# U& ^6 y0 g7 E7 s- N. @SIGINT (2)' `. U' |, ?" O6 S  E
  • 觸發(fā)方式:當(dāng)用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認操作:終止進程。
  • 描述:用于中斷正在運行的前臺進程,是常用的終止命令。. Z- P! c) M: x/ ?$ P
    * i/ i, b% J4 R" d3 l2 w; b
    / C9 [& j( o6 g( b
    SIGQUIT (3)
    ) o2 j/ [# K. E/ U
  • 觸發(fā)方式:當(dāng)用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認操作:終止進程并生成核心轉(zhuǎn)儲文件。
  • 描述:用于在程序進入無限循環(huán)或不響應(yīng)時終止進程,并生成調(diào)試用的核心文件。$ e5 i5 [# p7 V, r/ G

    6 U) g% x9 @6 z. Q# |
    4 w  b& G( H4 b/ q5 p5 b7 A- n* F
    SIGILL (4)
    " N4 ]* {" a- ?: U& b% r
  • 觸發(fā)方式:進程嘗試執(zhí)行非法的機器語言指令。
  • 默認操作:終止進程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。
    . P, F, J$ e* X* n& ]/ h
    : v& I$ m) k) o& j& T
      ^8 a' B) q1 f; l) J
    SIGABRT (6)
    # ?0 ~/ S5 \% k
  • 觸發(fā)方式:當(dāng)進程調(diào)用abort()系統(tǒng)調(diào)用。
  • 默認操作:終止進程并生成核心轉(zhuǎn)儲文件。
  • 描述:用于指示進程自身發(fā)現(xiàn)了嚴重錯誤,并請求自我終止。4 J# i( N' J6 e# f8 M$ z) J
    8 W6 o* O# z' ^& N

    4 N9 x- \3 \' B  ^SIGBUS (7)- X% d* ]1 ~, Q1 ~) L; {0 x; ^0 X
  • 觸發(fā)方式:發(fā)生總線錯誤(例如錯誤的內(nèi)存訪問)。
  • 默認操作:終止進程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關(guān)。0 x  k  R5 W& O) x

    : }+ p# [) Q" O3 j7 E

    , A$ e( a4 t: l  a% {0 kSIGFPE (8)  W2 Q" m% C9 Y5 g  e  O
  • 觸發(fā)方式:特定類型的算術(shù)錯誤(例如除以零)。
  • 默認操作:終止進程。
  • 描述:用于表示浮點運算錯誤或其他算術(shù)異常。# b! t/ y* w8 {  E8 g7 R! h
    ) h7 v- E0 V" h$ u& O+ \9 C
    # H9 _$ ^6 [. Z# m3 w3 F5 B
    SIGKILL (9)' q+ I$ @5 r9 `0 }* ]( Y7 K
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認操作:立即終止進程。
  • 描述:是無法被捕獲或忽略的“必殺”信號,用于強制終止進程。( Z" c+ |- I0 m; C; w; [, p1 w

    * }# b# Z7 Q: P1 e; R" Q& p
    : K! D3 `: O; I; A
    SIGUSR1 (10)4 n  s/ Q" M* g  P) z4 k; {
  • 觸發(fā)方式:用戶定義的信號,供程序員自定義使用。
  • 默認操作:終止進程。
  • 描述:用戶程序可以使用此信號進行進程間通信或事件通知。% X( r. \* y4 l
    - c' E- e3 G8 p( t
    ! Z3 k" [0 ^0 N7 Q' F: R4 e+ i0 |
    SIGSEGV (11)
    0 F! j& {7 u- N# G6 {- O
  • 觸發(fā)方式:進程嘗試訪問無效的內(nèi)存地址。
  • 默認操作:終止進程。
  • 描述:常見于指針錯誤或無效內(nèi)存訪問操作,通常會導(dǎo)致程序崩潰。, j, D8 r( ^0 q+ v
    - q- j! Y! P' ]% [+ p' b' k8 d0 K
      P9 X; S. S' j+ v7 y0 N# }" d2 C# D
    SIGUSR2 (12)# z+ B) \, S# P
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認操作:終止進程。
  • 描述:供程序員自定義,用于進程間通信或自定義處理邏輯。
    # P1 [7 u' _) b! H$ ^
    + G0 J; g, M8 w/ L% ?/ F- ?

    5 U( X# C' Y  x" W$ Z5 p' jSIGPIPE (13)
    3 g3 _! E# F4 J2 \6 x% j
  • 觸發(fā)方式:進程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認操作:終止進程。
  • 描述:當(dāng)嘗試向無效的通信通道寫入數(shù)據(jù)時觸發(fā),通常用于通知進程通信失敗。
    - {' `8 E2 n2 ~( t% b/ }

    * Z! A. K% p7 V! O4 _- N- u

    * w0 ~- f" a  Y5 F6 Z: L, NSIGALRM (14)
    % f1 P: |) T" ]
  • 觸發(fā)方式:定時器到期(由alarm()或setitimer()設(shè)置)。
  • 默認操作:終止進程。
  • 描述:常用于定時操作,信號觸發(fā)后通常終止程序或進行某種處理。8 \3 f# ], T; ^% ~2 H  \

    8 v" k) I( a) |( N4 X6 P9 _5 I
    ' Z; P6 e9 q, `" W2 x2 f; r
    SIGTERM (15)
    2 G7 K/ b! l! C* Q
  • 觸發(fā)方式:通過kill命令(不帶-9選項)。
  • 默認操作:終止進程。
  • 描述:用于請求進程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。
    / M1 g8 q3 |! p4 h" g
    8 O( A4 R" K( w
    $ K9 D0 M. R" D
    SIGCHLD (17)  q) u1 O! q6 u5 C' Y  N" Z
  • 觸發(fā)方式:子進程終止或狀態(tài)改變。
  • 默認操作:忽略信號。
  • 描述:父進程用來得知子進程終止或狀態(tài)改變,默認忽略,父進程可選擇處理。5 U1 C* d. ?0 M' e3 ?3 Q8 N( N

    / R9 B8 t1 e& M- W) |

    ! Y0 g& l( q! Y7 U0 cSIGCONT (18)4 e& T4 l" G& p) T- `
  • 觸發(fā)方式:恢復(fù)已停止的進程。
  • 默認操作:繼續(xù)運行進程。
  • 描述:發(fā)送給已停止的進程,使其恢復(fù)執(zhí)行。
    ' G2 Q% R2 @, R0 C' q  z8 R
    8 }- C& v! U* E

    9 M. u/ h- c( `+ E, FSIGSTOP (19)/ r; l& W6 A. t/ w! w
  • 觸發(fā)方式:強制停止進程。
  • 默認操作:停止進程。
  • 描述:無法捕獲或忽略的“必!毙盘,用于暫停進程執(zhí)行。, t% F: }7 P9 y0 `# x: Y

    - y4 P1 q0 l# u$ P

    ! l* }& G$ Z3 Y% p, `SIGTSTP (20)
    8 Z9 R. d. D: M5 A: Q
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認操作:停止進程。
  • 描述:用于暫停前臺進程組中的進程,常用于暫停任務(wù)。* u0 Y3 L9 q5 e) X. ~% ]9 g
    6 W% n# k  ~. {+ q" X

    * v: v- ], |( v$ C5 `) S" vSIGXCPU (24)
    : `7 u2 o2 B1 l0 ?$ [, |
  • 觸發(fā)方式:進程CPU時間超出限制。
  • 默認操作:終止進程。
  • 描述:通常用于檢測進程占用CPU過多時間,可能引發(fā)警告或終止進程。
    5 H/ H$ R- y$ K7 u/ L; C
    * k/ B5 [2 }& m$ W
    / Z7 U: `1 b1 d
    SIGVTALRM (26)
    2 ~: U7 D  m# Q$ R
  • 觸發(fā)方式:虛擬定時器到期(由setitimer()設(shè)置)。
  • 默認操作:終止進程。
  • 描述:用于虛擬定時器管理,定時器到期后觸發(fā)信號。3 F3 p3 ?2 t8 Y, {
    3 ]$ Q( S8 M9 o1 X2 v6 U1 e. h
    SIGWINCH (28)
    1 H! r$ [! j+ L' w" z
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認操作:忽略信號。
  • 描述:當(dāng)終端窗口調(diào)整大小時,前臺進程會接收到此信號。7 T( q' a& w/ r- o5 P

    0 D/ R) o: _+ A7 {" o
    & S- [) T2 S4 e5 R, ~0 d
    SIGPOLL/SIGIO (29)
    8 }3 q/ k  W8 x8 F+ u4 s% p
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認操作:終止進程。
  • 描述:用于異步I/O操作,通知進程文件描述符的I/O事件。
    1 F3 T0 c2 d8 a! G. c$ y' K# X. R" z
    1 m( r5 w% O; Q( ?
    SIGSYS (31)# H- d7 _4 ]( J# E5 N
  • 觸發(fā)方式:進程發(fā)起了無效的系統(tǒng)調(diào)用。
  • 默認操作:終止進程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯誤。4 x8 C# W: [; Q$ f( n+ E0 i2 r

    0 W+ |0 @( b7 V' s4 J這些信號為Linux進程提供了豐富的控制和通信機制。了解這些信號及其默認行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。0 |9 }( V/ t' v5 o! S! b

    7 x* J9 s# o' B3 n4 u   R( v  f* g9 y# D) t/ N
      t# o5 P- m& {3 B
    點擊閱讀原文,更精彩~
  • 回復(fù)

    使用道具 舉報

    發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表