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

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

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

嵌入式Linux:常見信號(hào)的默認(rèn)行為

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

四級(jí)會(huì)員

Rank: 4

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

$ I6 E6 t, x0 C2 R' q+ z- n點(diǎn)擊上方藍(lán)色字體,關(guān)注我們8 d+ I5 `4 h  @, d; p3 i: X
信號(hào)是一種軟件中斷,用于通知進(jìn)程發(fā)生了某種異步事件。信號(hào)可以由用戶、其他進(jìn)程或操作系統(tǒng)內(nèi)核產(chǎn)生。進(jìn)程可以選擇捕獲并處理這些信號(hào),或者忽略它們,讓系統(tǒng)執(zhí)行默認(rèn)操作。
7 o* X* l: _4 l! b( V, u
& {6 j8 L3 O0 Y. ~ 8 p* k' t4 x; D& C# {! {
, l$ X9 W* @3 b  w3 M7 F. ]
  • 不可靠信號(hào)(非實(shí)時(shí)信號(hào)):編號(hào)為 1~31 的信號(hào)。它們的行為可能因?qū)崿F(xiàn)而異,特別是在信號(hào)被阻塞或忽略的情況下。如果多個(gè)相同的不可靠信號(hào)在短時(shí)間內(nèi)連續(xù)到達(dá),它們可能會(huì)合并成一個(gè)信號(hào)。
  • 可靠信號(hào)(實(shí)時(shí)信號(hào)):編號(hào)為 34~64 的信號(hào)。它們的行為在所有 POSIX 兼容的系統(tǒng)上都是相同的。可靠信號(hào)不會(huì)合并,即使它們?cè)诙虝r(shí)間內(nèi)連續(xù)到達(dá)?煽啃盘(hào)支持排隊(duì),這意味著如果一個(gè)可靠信號(hào)被阻塞,它將被存儲(chǔ)在隊(duì)列中,直到信號(hào)處理程序準(zhǔn)備就緒。: V6 @+ [" o$ U  W

    ; K& x% D7 D+ w8 e4 K# V) M1 {常見信號(hào)的用途和系統(tǒng)默認(rèn)操作如下:/ h- L; ~9 m/ H4 m, ?; e, }
      R6 ]5 f4 @: j6 U! |
    0 z/ p( D5 r9 C8 i0 d1 d% {' l
    % O% e, K+ v9 Z$ R1 S+ L
    SIGINT (2)/ X! U( \& `) ^2 _1 f/ M
  • 觸發(fā)方式:當(dāng)用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于中斷正在運(yùn)行的前臺(tái)進(jìn)程,是常用的終止命令。
    2 F5 f, x( E3 X5 N

    4 q; `1 B" |- {6 l$ t2 y

    # X+ M1 a6 s, g% V4 A( RSIGQUIT (3)
    - }- a6 J& a9 z# \0 f6 O
  • 觸發(fā)方式:當(dāng)用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲(chǔ)文件。
  • 描述:用于在程序進(jìn)入無限循環(huán)或不響應(yīng)時(shí)終止進(jìn)程,并生成調(diào)試用的核心文件。$ I2 s- ?8 K* y: A

    6 V3 {* n) E+ D9 A2 K
      T8 m" X/ S" W
    SIGILL (4)
    . _7 \1 ?7 I' Y1 M; D' H
  • 觸發(fā)方式:進(jìn)程嘗試執(zhí)行非法的機(jī)器語言指令。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。
    ! T0 |/ a* k% Z4 X# J3 I* I1 |
    % l7 X* c" [! f: W9 q& \9 p

    6 n7 q6 M8 [. P0 o* {4 z+ u$ |SIGABRT (6)
    . C+ z$ R6 F9 U0 g2 H3 e' p
  • 觸發(fā)方式:當(dāng)進(jìn)程調(diào)用abort()系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲(chǔ)文件。
  • 描述:用于指示進(jìn)程自身發(fā)現(xiàn)了嚴(yán)重錯(cuò)誤,并請(qǐng)求自我終止。
    : i6 z7 j+ k' V9 K
    8 F: h; F" K: @) s3 W" n' Y
    8 o& r. H' Q2 K( @# m; H' {0 Y
    SIGBUS (7)1 z; ?& ^2 s; E5 w2 A! \! ~+ F- R, ~/ m
  • 觸發(fā)方式:發(fā)生總線錯(cuò)誤(例如錯(cuò)誤的內(nèi)存訪問)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關(guān)。
    9 u# E. x) h! g

    8 N* t; ]7 p" w7 {( L1 h7 [9 K

    " K. G( L+ v7 y' nSIGFPE (8)
    5 D9 `( s& m8 ]6 a
  • 觸發(fā)方式:特定類型的算術(shù)錯(cuò)誤(例如除以零)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于表示浮點(diǎn)運(yùn)算錯(cuò)誤或其他算術(shù)異常。
    4 P: f2 P( E, t* Y# R. H- ~

    ! Z; S2 E; a, `5 h% f" G6 c

    9 R4 E- a! j, p; j" g7 O7 jSIGKILL (9)
      H9 i/ U0 m7 D+ {9 n5 I
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認(rèn)操作:立即終止進(jìn)程。
  • 描述:是無法被捕獲或忽略的“必殺”信號(hào),用于強(qiáng)制終止進(jìn)程。/ `# x. J4 k. g* z

    1 \( q' h0 e+ S

    6 C( O9 o" m% q' q9 N; f* GSIGUSR1 (10), ^3 v. [2 x0 s1 A3 T* X# {, ~4 J
  • 觸發(fā)方式:用戶定義的信號(hào),供程序員自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用戶程序可以使用此信號(hào)進(jìn)行進(jìn)程間通信或事件通知。
    ' C% a7 h. B* O: i5 V

    " Z& _0 Y5 e+ ?: T' U2 e* C; X
      B5 W2 U0 D8 g" g6 n4 p
    SIGSEGV (11)2 y/ g& G! b. l  E; }. J
  • 觸發(fā)方式:進(jìn)程嘗試訪問無效的內(nèi)存地址。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常見于指針錯(cuò)誤或無效內(nèi)存訪問操作,通常會(huì)導(dǎo)致程序崩潰。
    0 h% u' A0 g( q- u7 u: f$ M

    + |& V1 p. M. e& `
      E. U9 ~9 ~6 V5 [& c" g
    SIGUSR2 (12)
    + ^+ B! O- ~. ]
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:供程序員自定義,用于進(jìn)程間通信或自定義處理邏輯。
    - Y( X- K5 L' K/ L

    " E8 [, K# l$ _  u$ u

    4 s5 I. I5 q- f' dSIGPIPE (13)' n1 c& @# w9 B6 y* E* a
  • 觸發(fā)方式:進(jìn)程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:當(dāng)嘗試向無效的通信通道寫入數(shù)據(jù)時(shí)觸發(fā),通常用于通知進(jìn)程通信失敗。9 M8 U1 r8 x( V

    2 r6 ^& P: L# G

    $ n( U; b  k1 |5 |5 d8 y0 fSIGALRM (14)
    & Q6 J* |& D. w* F
  • 觸發(fā)方式:定時(shí)器到期(由alarm()或setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常用于定時(shí)操作,信號(hào)觸發(fā)后通常終止程序或進(jìn)行某種處理。
      d# p2 i) [, N* K1 u/ a! @. f0 @
    9 l) _  r/ K; O
    & W# p2 T  n- _
    SIGTERM (15)4 p4 j3 H. G/ E' C
  • 觸發(fā)方式:通過kill命令(不帶-9選項(xiàng))。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于請(qǐng)求進(jìn)程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。% @, m5 M# C. ?( r! ]5 [  ^
    0 X' h) s& l) ]$ ]5 c

    $ k6 B8 ~2 R  ?( e6 kSIGCHLD (17)
    0 u; P4 J' X& D1 s, b) Q
  • 觸發(fā)方式:子進(jìn)程終止或狀態(tài)改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:父進(jìn)程用來得知子進(jìn)程終止或狀態(tài)改變,默認(rèn)忽略,父進(jìn)程可選擇處理。
    9 i1 P' X- `" Y$ I* t
    5 q9 k4 C6 o! ?/ o9 U/ u0 B& g. W

    / D* C6 h. V# X( |7 U: oSIGCONT (18)
    % V4 X* ^* `/ V$ p5 }0 P7 L
  • 觸發(fā)方式:恢復(fù)已停止的進(jìn)程。
  • 默認(rèn)操作:繼續(xù)運(yùn)行進(jìn)程。
  • 描述:發(fā)送給已停止的進(jìn)程,使其恢復(fù)執(zhí)行。# k: L1 v% I! `( E$ ~( `% x
    0 ~  N! ~, C8 O1 n9 i
    & p8 C0 @* T$ c9 T) I
    SIGSTOP (19)
    ; f- z; B# X0 Y2 ?& x3 Y* x+ T# S
  • 觸發(fā)方式:強(qiáng)制停止進(jìn)程。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:無法捕獲或忽略的“必!毙盘(hào),用于暫停進(jìn)程執(zhí)行。
    . G5 c2 Q& c- P' \0 A& d% d

    / J0 z& f& r3 ^( m; h

    9 h8 d2 D* ~6 a: fSIGTSTP (20)' O0 a% J$ Y9 j8 z, `$ P
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:用于暫停前臺(tái)進(jìn)程組中的進(jìn)程,常用于暫停任務(wù)。- T  S6 O( R9 i
    4 @, U! G. {8 @8 T% s7 F. z
    ( Z5 R$ @0 Y+ Q* w5 _! X
    SIGXCPU (24); L; Q2 H9 v+ Z5 X
  • 觸發(fā)方式:進(jìn)程CPU時(shí)間超出限制。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于檢測(cè)進(jìn)程占用CPU過多時(shí)間,可能引發(fā)警告或終止進(jìn)程。
    & e' i+ P. |! _3 ]

    3 ~. B. ~3 e0 H) o  e
    ' M$ b* P% T  ]4 S" ?
    SIGVTALRM (26)$ E( \' W3 _; g6 w8 i, [
  • 觸發(fā)方式:虛擬定時(shí)器到期(由setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于虛擬定時(shí)器管理,定時(shí)器到期后觸發(fā)信號(hào)。
    ( k) w9 V' h  f
    8 v/ P  B2 e" `7 g" w$ T/ u' x1 R  m
    SIGWINCH (28)
    8 J  _1 [2 j# Q3 r, \- W
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:當(dāng)終端窗口調(diào)整大小時(shí),前臺(tái)進(jìn)程會(huì)接收到此信號(hào)。
    " E% Q! Q% }% |/ r8 b8 N  s0 L

    . Y7 O0 m% i- E: J) M  k

    & p+ @+ C! ]1 X4 F5 WSIGPOLL/SIGIO (29)
    , v' q$ r3 u  _: x2 H/ F
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于異步I/O操作,通知進(jìn)程文件描述符的I/O事件。/ |8 B. e; k/ ]3 z7 r

    " n% C6 }. q! p1 Q2 OSIGSYS (31)
    7 d+ |/ \" O6 n4 `
  • 觸發(fā)方式:進(jìn)程發(fā)起了無效的系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯(cuò)誤。  J& H- \. v# Z! f# \
    1 }  Z, d  S: m" M" j$ P( h% z
    這些信號(hào)為Linux進(jìn)程提供了豐富的控制和通信機(jī)制。了解這些信號(hào)及其默認(rèn)行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。
    ! W. y9 l" @' i( ?5 z8 h9 [3 \* S
    * K& p( R. ^( F# @$ I" I+ {, A
    + b' ^$ _+ _# P. z  o( j
    : Q, N2 W, m" v0 Y: D點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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