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

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

搜索
查看: 26|回復: 0
收起左側

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

[復制鏈接]

563

主題

563

帖子

3385

積分

四級會員

Rank: 4

積分
3385
跳轉到指定樓層
樓主
發(fā)表于 2024-8-23 12:03:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
* o3 v+ z, a& d- c9 r3 T0 ]
點擊上方藍色字體,關注我們4 v2 T) h6 z8 {+ B% i& y) O
信號是一種軟件中斷,用于通知進程發(fā)生了某種異步事件。信號可以由用戶、其他進程或操作系統(tǒng)內(nèi)核產(chǎn)生。進程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統(tǒng)執(zhí)行默認操作。) ?3 V2 J# h# {

+ q) q% Z* V" D1 y6 z
: F5 A  v) H# R! R+ G9 W- |5 H" w/ ]* X/ @: i
  • 不可靠信號(非實時信號):編號為 1~31 的信號。它們的行為可能因實現(xiàn)而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內(nèi)連續(xù)到達,它們可能會合并成一個信號。
  • 可靠信號(實時信號):編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統(tǒng)上都是相同的?煽啃盘柌粫喜,即使它們在短時間內(nèi)連續(xù)到達?煽啃盘栔С峙抨,這意味著如果一個可靠信號被阻塞,它將被存儲在隊列中,直到信號處理程序準備就緒。
    ' o) W8 `, v5 `5 I; Y' I) c
      V8 v4 |. s( n7 O3 s( N  Y$ ^
    常見信號的用途和系統(tǒng)默認操作如下:
    # C3 G$ R# z! V4 `, G, d  q
      s# k8 t8 K) \+ v8 M6 j1 P# P 4 {% V. H) G, C: z
    7 T) g8 v) z& `6 u4 G
    SIGINT (2)
    * O5 T5 v5 Q7 V$ o6 n
  • 觸發(fā)方式:當用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認操作:終止進程。
  • 描述:用于中斷正在運行的前臺進程,是常用的終止命令。
    ( P8 o3 {5 m' I1 m# F/ |; z  B
    4 F6 [9 F1 R- Q0 {3 o1 |& z
    # b% o: B1 h4 s. r; T
    SIGQUIT (3)
    * N6 l$ J0 _7 r4 v) M
  • 觸發(fā)方式:當用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認操作:終止進程并生成核心轉儲文件。
  • 描述:用于在程序進入無限循環(huán)或不響應時終止進程,并生成調試用的核心文件。
    8 z) I- o$ V! p/ J
    5 B1 U" I: T- ]5 v2 b

    + W+ t2 t4 G, L# M2 Z. g* `+ SSIGILL (4)
    ; s1 ~$ y' x# q2 L4 U
  • 觸發(fā)方式:進程嘗試執(zhí)行非法的機器語言指令。
  • 默認操作:終止進程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。
    0 o" L4 V& x1 Y* H# b

    7 D$ L: V2 A: \- C% y8 [

    : \0 |5 E9 d4 z2 ~" ^/ M$ a3 }6 SSIGABRT (6)
    ! i5 ?. Y* H' u; c
  • 觸發(fā)方式:當進程調用abort()系統(tǒng)調用。
  • 默認操作:終止進程并生成核心轉儲文件。
  • 描述:用于指示進程自身發(fā)現(xiàn)了嚴重錯誤,并請求自我終止。
    $ A4 z" I  h! F/ S( R  u5 r# h" \
    5 {, n8 h3 |0 e0 o$ L
    # f: O9 ^* r4 o) a; v
    SIGBUS (7)# B6 J. J/ g, a
  • 觸發(fā)方式:發(fā)生總線錯誤(例如錯誤的內(nèi)存訪問)。
  • 默認操作:終止進程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關。8 Q; o6 n2 z) F3 Y9 v' C
    & j$ r4 C' ^0 o# t% E8 q: f
    / b. q2 N! z8 b& D3 A3 }
    SIGFPE (8)
    , P$ a- t. w+ i/ y: `
  • 觸發(fā)方式:特定類型的算術錯誤(例如除以零)。
  • 默認操作:終止進程。
  • 描述:用于表示浮點運算錯誤或其他算術異常。
    ( O# y& m# y& t" h% `

    $ X  }" K. r- d% E# A6 E6 v6 @

    * ~9 [5 R4 b! H! i6 L8 ]( g5 DSIGKILL (9)
    + i6 b7 n, z9 V# K) r, ~9 C
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認操作:立即終止進程。
  • 描述:是無法被捕獲或忽略的“必殺”信號,用于強制終止進程。
    4 o$ ?& i6 t: z
    : k# n0 t3 H0 O5 N! f

    . l1 Q+ h. ~% N1 Y% Z* i# QSIGUSR1 (10)
    ' F0 n3 T! H4 J5 D: s+ G
  • 觸發(fā)方式:用戶定義的信號,供程序員自定義使用。
  • 默認操作:終止進程。
  • 描述:用戶程序可以使用此信號進行進程間通信或事件通知。" }1 z9 z- I/ t( L, r8 u, w9 {
    . K( O" S! l7 T

      n. v% O4 U0 W3 \8 Z8 W  y3 tSIGSEGV (11)3 |: N& u5 T3 Y8 f
  • 觸發(fā)方式:進程嘗試訪問無效的內(nèi)存地址。
  • 默認操作:終止進程。
  • 描述:常見于指針錯誤或無效內(nèi)存訪問操作,通常會導致程序崩潰。  p; w( M, z' e8 Q% e

    7 R% D6 [! j; \! S  t( u
    ( `3 q7 i4 A  N
    SIGUSR2 (12)9 t% L5 P9 D. K0 w/ w' o" ]0 Y2 j
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認操作:終止進程。
  • 描述:供程序員自定義,用于進程間通信或自定義處理邏輯。3 t% f  _/ V" i- o! a' b0 o# `

    , z# W& l$ j, H! @) d/ [; @% R

    . j, ?2 N8 }! i# BSIGPIPE (13)
    & \0 e4 p$ |" s8 ?2 c+ p) q3 f
  • 觸發(fā)方式:進程向已關閉的管道或套接字寫入數(shù)據(jù)。
  • 默認操作:終止進程。
  • 描述:當嘗試向無效的通信通道寫入數(shù)據(jù)時觸發(fā),通常用于通知進程通信失敗。
    ) O+ w' y3 q+ n

      a4 a, {; R5 |, ~" e- v
    + h% G$ B5 x4 L8 D7 _: @' G7 H& T
    SIGALRM (14)
    ' y" a0 |! O/ b( z1 i
  • 觸發(fā)方式:定時器到期(由alarm()或setitimer()設置)。
  • 默認操作:終止進程。
  • 描述:常用于定時操作,信號觸發(fā)后通常終止程序或進行某種處理。4 v1 c: z  P  m9 E$ v7 c9 L

    " a3 q& C# L3 \2 c$ x8 A
    * @0 a0 [  d! G+ O6 \, `1 g
    SIGTERM (15)
    ; k; g+ \$ k! @% Y( I5 i
  • 觸發(fā)方式:通過kill命令(不帶-9選項)。
  • 默認操作:終止進程。
  • 描述:用于請求進程正常終止,通常用于優(yōu)雅地關閉應用程序。
      A; k* |7 t0 C; h) B  ?1 g: T6 t
    " ^' x+ z% l5 ^) j8 y

    , p6 S7 O# N  V9 n. uSIGCHLD (17)
    ( m7 l7 B0 I4 f! U4 Q. ^6 m
  • 觸發(fā)方式:子進程終止或狀態(tài)改變。
  • 默認操作:忽略信號。
  • 描述:父進程用來得知子進程終止或狀態(tài)改變,默認忽略,父進程可選擇處理。
    $ W; s! m8 g# B3 `; @
    1 F0 s* i" o5 E/ T. ~# }+ r9 f+ A

    ; x) _1 h# y: ~6 q: |" n0 kSIGCONT (18)
    + I1 A- V( R# c4 b- P8 v! w
  • 觸發(fā)方式:恢復已停止的進程。
  • 默認操作:繼續(xù)運行進程。
  • 描述:發(fā)送給已停止的進程,使其恢復執(zhí)行。7 ~: G+ z9 ?. z
    . Y6 K% s# x  {8 i$ h2 `7 {2 G

    8 Q1 o; l8 h2 U8 Y# t5 @) B6 C1 P# NSIGSTOP (19)3 s, b3 Y+ V% Z$ f3 z' Y# i$ L
  • 觸發(fā)方式:強制停止進程。
  • 默認操作:停止進程。
  • 描述:無法捕獲或忽略的“必停”信號,用于暫停進程執(zhí)行。
    4 v0 H. k% N% n+ k- R+ F: J( C3 y

    2 o) A0 n: P% t! X
    2 ^, C6 t  R" f  A
    SIGTSTP (20)
    $ f8 l6 F) }; @. p* h. g6 i0 i
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認操作:停止進程。
  • 描述:用于暫停前臺進程組中的進程,常用于暫停任務。
    ' N! x" L& h) A% F. X
      p. A$ T" {* }' o/ i+ k
    ! z" A4 N; ?9 ?' ^1 ~, ]
    SIGXCPU (24)
    ! _4 e  _" A  k! O. D
  • 觸發(fā)方式:進程CPU時間超出限制。
  • 默認操作:終止進程。
  • 描述:通常用于檢測進程占用CPU過多時間,可能引發(fā)警告或終止進程。4 O3 e- C; O" t" K6 c. Q
    ) Y# L' G3 L& x1 y- e% V0 U

    , b  F( K2 }/ X/ M) M' T6 lSIGVTALRM (26)# s5 K5 o* ^& H# F9 N; O- X$ I
  • 觸發(fā)方式:虛擬定時器到期(由setitimer()設置)。
  • 默認操作:終止進程。
  • 描述:用于虛擬定時器管理,定時器到期后觸發(fā)信號。
    , K4 P# v  i& m3 G8 m

    4 t/ a3 z) o# `' G1 xSIGWINCH (28)
    # M8 G. V) e9 r  y
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認操作:忽略信號。
  • 描述:當終端窗口調整大小時,前臺進程會接收到此信號。
    0 i9 z( _8 G  ^0 m6 Y) T- L1 L

    $ g5 U1 ~% Y- }; j2 u0 u

    $ m2 c  @  H( [% G) hSIGPOLL/SIGIO (29)
    % g* y6 V4 R+ d+ C7 ]; p" Q
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認操作:終止進程。
  • 描述:用于異步I/O操作,通知進程文件描述符的I/O事件。2 f& |; C( T$ u6 }  C5 L0 N! O

    * w6 K0 z( w- ^8 s6 }4 NSIGSYS (31)
    # l( j8 F# c4 ^8 c4 _3 b9 m) h% z1 {
  • 觸發(fā)方式:進程發(fā)起了無效的系統(tǒng)調用。
  • 默認操作:終止進程。
  • 描述:通常用于捕獲非法系統(tǒng)調用或程序錯誤。4 D1 Y8 i! ^. ]9 x4 N  o) C- J% l

    + X$ g: H3 [# F# L: |這些信號為Linux進程提供了豐富的控制和通信機制。了解這些信號及其默認行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。$ {' S. M  \1 O  h( M) q
    $ M+ P8 F) ]2 x

    % |/ q6 {; `! S( U' W
    : y9 j6 D9 x1 q3 Q' G* E點擊閱讀原文,更精彩~
  • 回復

    使用道具 舉報

    發(fā)表回復

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

    本版積分規(guī)則


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