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

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

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

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

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

四級會員

Rank: 4

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

+ H* {# l, E5 p$ ?點擊上方藍色字體,關(guān)注我們' k3 ^4 ^6 k: K: \; m  `6 y
信號是一種軟件中斷,用于通知進程發(fā)生了某種異步事件。信號可以由用戶、其他進程或操作系統(tǒng)內(nèi)核產(chǎn)生。進程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統(tǒng)執(zhí)行默認操作。
* t- j2 K7 X# Y4 A1 U# f2 W2 t9 o9 P

# I4 V9 S) s3 X' Q. W& r- p
: C0 _- X$ J9 h
  • 不可靠信號(非實時信號):編號為 1~31 的信號。它們的行為可能因?qū)崿F(xiàn)而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內(nèi)連續(xù)到達,它們可能會合并成一個信號。
  • 可靠信號(實時信號):編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統(tǒng)上都是相同的?煽啃盘柌粫喜,即使它們在短時間內(nèi)連續(xù)到達?煽啃盘栔С峙抨,這意味著如果一個可靠信號被阻塞,它將被存儲在隊列中,直到信號處理程序準備就緒。. E) J: ]. {% K* _

    * H, m+ O9 A6 o: {' x, t. m4 E( h常見信號的用途和系統(tǒng)默認操作如下:) l3 X1 Y6 ?8 _! D

    1 i6 E& D2 n. U6 J1 x( Y
    9 \- |$ E. R* L% E/ B$ I) ]- _% {) f+ J8 d& r+ M# F; ^' m
    SIGINT (2)* r% M  x6 Q4 K3 U2 t
  • 觸發(fā)方式:當用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認操作:終止進程。
  • 描述:用于中斷正在運行的前臺進程,是常用的終止命令。( Q2 E4 X7 [( }& y

    : k1 L. m: r' f% g5 i6 I0 `

    + A; s& G% m' ~4 y0 e. bSIGQUIT (3), j% q8 P  a. \/ W3 Y
  • 觸發(fā)方式:當用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認操作:終止進程并生成核心轉(zhuǎn)儲文件。
  • 描述:用于在程序進入無限循環(huán)或不響應(yīng)時終止進程,并生成調(diào)試用的核心文件。
    # f! N4 p! ^4 r0 c, G

    ' Q) T+ ?; ~7 Z2 @

    ; x% l0 m: U4 C* G" O& XSIGILL (4)' |- F" C; `) S6 ]- m
  • 觸發(fā)方式:進程嘗試執(zhí)行非法的機器語言指令。
  • 默認操作:終止進程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。
    ' D$ }3 I/ \% n& n. d9 Y" M

    ; D: B, f5 U: c; s! k

    ; P/ g6 x, A8 \! ESIGABRT (6)
    . |8 w7 ^* A1 m5 D0 t
  • 觸發(fā)方式:當進程調(diào)用abort()系統(tǒng)調(diào)用。
  • 默認操作:終止進程并生成核心轉(zhuǎn)儲文件。
  • 描述:用于指示進程自身發(fā)現(xiàn)了嚴重錯誤,并請求自我終止。' s  O, A$ ~+ W4 h! W

    + y2 S4 F2 P. J. P* N

    6 }- l0 u  d1 e2 v5 T. MSIGBUS (7)
    & i% r0 O2 c. G
  • 觸發(fā)方式:發(fā)生總線錯誤(例如錯誤的內(nèi)存訪問)。
  • 默認操作:終止進程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關(guān)。. @3 \! k  b" V5 l  B9 [

    $ i+ p  ~  O3 l: @" i2 H: ]- b
      J# Y9 F/ ]( y6 [4 G
    SIGFPE (8)" R5 @/ L) H, y
  • 觸發(fā)方式:特定類型的算術(shù)錯誤(例如除以零)。
  • 默認操作:終止進程。
  • 描述:用于表示浮點運算錯誤或其他算術(shù)異常。
    7 ^& f$ F: y5 ~4 N9 `

    * e: o' z4 \8 \2 Z( H
    8 E" G8 Y* o* z; c. _
    SIGKILL (9)) S$ }+ g  Z& s1 L
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認操作:立即終止進程。
  • 描述:是無法被捕獲或忽略的“必殺”信號,用于強制終止進程。! q/ C5 R% N' J

    ; }6 H: B$ g! v7 Q' C& M* y( S
    8 o8 X5 i2 ]! m- N+ q7 C, U
    SIGUSR1 (10)3 x! N3 X& z" V) c0 Q  y$ K4 b$ p4 Q
  • 觸發(fā)方式:用戶定義的信號,供程序員自定義使用。
  • 默認操作:終止進程。
  • 描述:用戶程序可以使用此信號進行進程間通信或事件通知。' T4 f8 D$ t/ g- ^/ F0 H

    $ D% e+ |8 }3 O
    ! |/ ~/ i. A4 ]) \
    SIGSEGV (11)9 g) n8 d0 i$ \5 @5 S3 e, m! p- w
  • 觸發(fā)方式:進程嘗試訪問無效的內(nèi)存地址。
  • 默認操作:終止進程。
  • 描述:常見于指針錯誤或無效內(nèi)存訪問操作,通常會導(dǎo)致程序崩潰。
    2 d3 V" ~" b+ e( C- k

    , h2 W7 y8 X/ o! @# i/ I! b# R; ^. j
    " `( E! @+ B/ R- b. W
    SIGUSR2 (12)4 m0 D) V, H5 g# O
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認操作:終止進程。
  • 描述:供程序員自定義,用于進程間通信或自定義處理邏輯。( c! I. u1 L; d5 t
    - o* f9 u* `/ ^; f) q
    0 f3 ?% u! K1 l$ w" H( d
    SIGPIPE (13)- n- |/ g9 s% l  ]/ M. _
  • 觸發(fā)方式:進程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認操作:終止進程。
  • 描述:當嘗試向無效的通信通道寫入數(shù)據(jù)時觸發(fā),通常用于通知進程通信失敗。
    ) f1 f* o+ G2 V. k

      r  w) T' u" Q7 w, f1 W

    7 T3 I  `( P' h# @2 [+ x& L8 A# vSIGALRM (14)3 E/ j: W3 x+ {5 Y  n7 X. J
  • 觸發(fā)方式:定時器到期(由alarm()或setitimer()設(shè)置)。
  • 默認操作:終止進程。
  • 描述:常用于定時操作,信號觸發(fā)后通常終止程序或進行某種處理。
    ! K$ T8 V- ?  V5 u% ?! X
    + J4 X" W  z! z: W1 F8 [! N
    ) C7 _- b0 N2 d9 A. d$ v1 i
    SIGTERM (15)
    & ^! c) Y# T5 }, D' Q* o
  • 觸發(fā)方式:通過kill命令(不帶-9選項)。
  • 默認操作:終止進程。
  • 描述:用于請求進程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。; f" @# l' g( l5 B% P  L
    * ]- Y: w+ ~7 _* W7 T" H
    ( E2 n& C+ P. D* L+ q* W4 d
    SIGCHLD (17)5 g  S& L# \# h  l+ A
  • 觸發(fā)方式:子進程終止或狀態(tài)改變。
  • 默認操作:忽略信號。
  • 描述:父進程用來得知子進程終止或狀態(tài)改變,默認忽略,父進程可選擇處理。% C- [7 q  v$ `  B' d" A  q

    % D7 u7 F" D( i/ ^# m

    7 o% `. c* S( \( {SIGCONT (18)
    # p1 `, t( P% j/ B/ }
  • 觸發(fā)方式:恢復(fù)已停止的進程。
  • 默認操作:繼續(xù)運行進程。
  • 描述:發(fā)送給已停止的進程,使其恢復(fù)執(zhí)行。
    / T  {3 i+ j, f) w+ y/ F5 d

    + d: p+ \0 Y6 c) b# J

    ' j+ a  c3 q2 y; s. t' PSIGSTOP (19)
    + l  L& p4 K' ~& V4 ]( {' k/ `  c
  • 觸發(fā)方式:強制停止進程。
  • 默認操作:停止進程。
  • 描述:無法捕獲或忽略的“必!毙盘枺糜跁和_M程執(zhí)行。
    # s0 F) j# z; `1 p5 Y
      I1 y6 l  Q% G: u

    ) ^1 q4 n4 ?- j8 CSIGTSTP (20)
    . ]) [9 W& I3 ^; o
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認操作:停止進程。
  • 描述:用于暫停前臺進程組中的進程,常用于暫停任務(wù)。: k& o+ z0 R, ?( N; r% a5 X
    % [+ A) w+ k5 {  b" u3 |
    5 Q( k% s' i  _3 X4 e
    SIGXCPU (24)
    $ h0 D' i$ u  b0 d3 I
  • 觸發(fā)方式:進程CPU時間超出限制。
  • 默認操作:終止進程。
  • 描述:通常用于檢測進程占用CPU過多時間,可能引發(fā)警告或終止進程。
    7 h& Z6 @+ |" X

    ( z$ s- [3 N# t3 y. M  K
    % H: H' K& h! s0 F$ a# c5 W
    SIGVTALRM (26). _( F; y* ?0 ^8 [/ V. Z) i
  • 觸發(fā)方式:虛擬定時器到期(由setitimer()設(shè)置)。
  • 默認操作:終止進程。
  • 描述:用于虛擬定時器管理,定時器到期后觸發(fā)信號。4 i# Z$ A5 N4 w  ^9 N
    7 g3 @1 E5 ?: @# x5 r" u5 l, @- z
    SIGWINCH (28)
    ( D7 |4 s* d# |+ a; j( i/ p  E4 ^" n& [
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認操作:忽略信號。
  • 描述:當終端窗口調(diào)整大小時,前臺進程會接收到此信號。
    . Z( k" B. R6 u0 a+ x
    : x/ Q& V' k! f( N9 H
    # v+ C0 [" S9 Y/ T
    SIGPOLL/SIGIO (29)
    # m$ ^! ?" Y- X5 w8 C
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認操作:終止進程。
  • 描述:用于異步I/O操作,通知進程文件描述符的I/O事件。
    1 ?6 r' G. R, ?
    ! a1 O  g( r5 l* q& J
    SIGSYS (31)! M; |% V* D6 c. f" e; p
  • 觸發(fā)方式:進程發(fā)起了無效的系統(tǒng)調(diào)用。
  • 默認操作:終止進程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯誤。4 H2 w' F0 B- N8 e' R2 t1 ]5 ^3 y
    ! j* E7 g$ t; L# ~! u
    這些信號為Linux進程提供了豐富的控制和通信機制。了解這些信號及其默認行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。1 u0 @4 q( I, ?( n

    8 j* z, D$ L& H  `  H 9 Y2 i# D# M/ p# |) f' s: X

    ! g  _0 f* b$ E+ I( D  l點擊閱讀原文,更精彩~
  • 回復(fù)

    使用道具 舉報

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

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

    本版積分規(guī)則


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