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

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

搜索
查看: 27|回復(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覽 |閱讀模式
$ w  u. m& [+ R4 E0 M) _/ N
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
* U( Z/ s7 Y2 K4 _( v6 O信號(hào)是一種軟件中斷,用于通知進(jìn)程發(fā)生了某種異步事件。信號(hào)可以由用戶、其他進(jìn)程或操作系統(tǒng)內(nèi)核產(chǎn)生。進(jìn)程可以選擇捕獲并處理這些信號(hào),或者忽略它們,讓系統(tǒng)執(zhí)行默認(rèn)操作。6 n1 q+ B6 W- V3 D+ t4 O

# R/ Z0 r3 S6 {( n1 u$ |" `5 J" B ! K6 `/ Q! A+ M3 o

; r5 G) l' a; T1 \% W1 L) `9 d& n
  • 不可靠信號(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)備就緒。
    - ^" \: F! G% g
    1 ^3 j0 D2 d, r
    常見信號(hào)的用途和系統(tǒng)默認(rèn)操作如下:# o9 C  i: Y  D

    4 ]3 E8 z$ M: l9 u+ f$ m) ^( Q8 L. V/ W
      }# G, [2 ]+ G
    ! a2 v4 a* n1 o7 a; ?! U% q  qSIGINT (2)) _' M; T, V  M- K
  • 觸發(fā)方式:當(dāng)用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于中斷正在運(yùn)行的前臺(tái)進(jìn)程,是常用的終止命令。8 q" H) g  Q8 R

    % t  U7 l3 Q5 k; t2 g% X5 y
      Y, Y. q8 I" _0 v
    SIGQUIT (3)
    6 Z5 t1 I' k% P) d' I( M$ s+ Z
  • 觸發(fā)方式:當(dāng)用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲(chǔ)文件。
  • 描述:用于在程序進(jìn)入無(wú)限循環(huán)或不響應(yīng)時(shí)終止進(jìn)程,并生成調(diào)試用的核心文件。
    0 x1 M$ A- t2 |% p. g

    : U" g- }- z! H- e
    - r0 W6 ^& `% d8 X/ ~1 e2 o( [2 H
    SIGILL (4)4 ~/ I4 p+ x. S# e* {& R
  • 觸發(fā)方式:進(jìn)程嘗試執(zhí)行非法的機(jī)器語(yǔ)言指令。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于指示程序執(zhí)行了無(wú)效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。' Q6 C. ]+ h' D
    3 U) @( h! ~! H, l- c

    & A# S# |4 U, Y* wSIGABRT (6); f. O1 h; ^( a" c
  • 觸發(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)求自我終止。, B3 b% A) `) G) K& Q

    6 Q/ F6 N: K8 u4 T, x/ {
    6 M0 R3 ]& p; Y3 q# _
    SIGBUS (7)( s+ B7 y/ w* X. A
  • 觸發(fā)方式:發(fā)生總線錯(cuò)誤(例如錯(cuò)誤的內(nèi)存訪問(wèn))。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:指示內(nèi)存訪問(wèn)沖突,通常與硬件有關(guān)。
    7 @( _7 R  e; h& x+ j0 @

    ! Y2 J( r: w+ c2 A
    : [# P6 H- G$ q6 v8 G% o
    SIGFPE (8), G/ z+ \  I( n/ `' `
  • 觸發(fā)方式:特定類型的算術(shù)錯(cuò)誤(例如除以零)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于表示浮點(diǎn)運(yùn)算錯(cuò)誤或其他算術(shù)異常。
      j9 d& u6 I2 `; B! i+ r
    % z1 V2 W2 S$ H/ S+ n# B9 F0 y3 F" a
    7 p" e3 T# D$ ?5 F* w0 B0 ?1 B
    SIGKILL (9), C) V" v# W/ r1 z" I/ c
  • 觸發(fā)方式:通過(guò)kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認(rèn)操作:立即終止進(jìn)程。
  • 描述:是無(wú)法被捕獲或忽略的“必殺”信號(hào),用于強(qiáng)制終止進(jìn)程。
    % [: i3 V: v- R( m1 Z, a" p
    8 R- j0 |) j: y$ Z7 \

    . C7 I$ f! x$ p, T3 jSIGUSR1 (10)( z8 m3 T% X; [: g" P! P
  • 觸發(fā)方式:用戶定義的信號(hào),供程序員自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用戶程序可以使用此信號(hào)進(jìn)行進(jìn)程間通信或事件通知。* G% G6 c3 D. V6 I
    7 Q  Q6 _5 O) d( w3 X0 j' l  L

      E, _9 W) M5 Z0 `6 DSIGSEGV (11)" e& t3 I% m1 D* l0 t
  • 觸發(fā)方式:進(jìn)程嘗試訪問(wèn)無(wú)效的內(nèi)存地址。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常見于指針錯(cuò)誤或無(wú)效內(nèi)存訪問(wèn)操作,通常會(huì)導(dǎo)致程序崩潰。
    , j, h& ^! E7 c0 [* ]4 [1 ^

    , ~& k! Z/ d5 @2 W# E& @" d

    + ~$ s5 n* @$ ~9 W$ F0 b( F7 b4 o! pSIGUSR2 (12); q8 h8 Q$ F1 X$ l; Z. x/ |# d3 i) ^
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:供程序員自定義,用于進(jìn)程間通信或自定義處理邏輯。& l* u0 b! f0 E" f/ r2 }# d

    ; U1 L- k' N0 A
    2 v1 i0 `4 i  n6 o
    SIGPIPE (13)
    3 ~7 D, `7 u1 k4 J" k% H+ r
  • 觸發(fā)方式:進(jìn)程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:當(dāng)嘗試向無(wú)效的通信通道寫入數(shù)據(jù)時(shí)觸發(fā),通常用于通知進(jìn)程通信失敗。# z. n& G* D) W" q6 U. s" o

    % N8 h3 C5 {  t3 z1 i: A, _7 v
      p, k5 t* j. Y# o* J1 a  E% f  ?6 j9 Q1 D
    SIGALRM (14)8 q4 O) r& p* P% x  }- ^
  • 觸發(fā)方式:定時(shí)器到期(由alarm()或setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常用于定時(shí)操作,信號(hào)觸發(fā)后通常終止程序或進(jìn)行某種處理。. x* X% }" m4 j- c2 ~. J7 w/ |: T
    . @" b, L! B! m/ A5 ~/ i# z
    ; o7 {8 d' }5 X5 F
    SIGTERM (15)
    & @: [- |, O5 t* O% M' M
  • 觸發(fā)方式:通過(guò)kill命令(不帶-9選項(xiàng))。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于請(qǐng)求進(jìn)程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。
    " t0 u7 |6 @5 H+ S" i
    7 e1 G5 M3 I7 a& E6 M3 m

    + S. J6 y5 a3 ]$ l, c9 R; P) T5 WSIGCHLD (17)7 Y& @6 C2 v% X% m( g
  • 觸發(fā)方式:子進(jìn)程終止或狀態(tài)改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:父進(jìn)程用來(lái)得知子進(jìn)程終止或狀態(tài)改變,默認(rèn)忽略,父進(jìn)程可選擇處理。
    ' ?2 M1 Z6 z& Z1 B
    + A* G2 ?) O8 z

    ) N( Z+ U) v; K0 p' V1 U8 ~( Z6 pSIGCONT (18)) f( [- c$ |! o
  • 觸發(fā)方式:恢復(fù)已停止的進(jìn)程。
  • 默認(rèn)操作:繼續(xù)運(yùn)行進(jìn)程。
  • 描述:發(fā)送給已停止的進(jìn)程,使其恢復(fù)執(zhí)行。
    + j3 L! l6 W& }6 `+ \' Q' U

    % p8 d$ Q3 _/ B  i* c; E- O% n$ `

    # y0 }* M( b$ RSIGSTOP (19)' \. }0 |2 t7 t% p
  • 觸發(fā)方式:強(qiáng)制停止進(jìn)程。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:無(wú)法捕獲或忽略的“必!毙盘(hào),用于暫停進(jìn)程執(zhí)行。( Z9 Y4 Y3 |2 \( ]! @# m* U5 l
    # n6 \0 B- I! o6 Y! ^( ?
    5 w1 e3 T' B( O6 U( k
    SIGTSTP (20)$ E6 h0 ?2 F+ ~" r' w/ C
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:用于暫停前臺(tái)進(jìn)程組中的進(jìn)程,常用于暫停任務(wù)。
    ; O! Q  r2 n2 p( W0 A' r) c5 s

    ; y* K1 H+ G( L3 n

    $ h! k/ u" e  \0 WSIGXCPU (24)
    % ?: }; ~$ k/ }
  • 觸發(fā)方式:進(jìn)程CPU時(shí)間超出限制。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于檢測(cè)進(jìn)程占用CPU過(guò)多時(shí)間,可能引發(fā)警告或終止進(jìn)程。
    ; g. l7 K% \1 d# \+ _8 _6 V

    8 R. V: O9 _1 Y- T
    $ }2 d8 x% D; a; T7 H
    SIGVTALRM (26)( E1 @4 \' I9 u& N, t/ S9 P
  • 觸發(fā)方式:虛擬定時(shí)器到期(由setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于虛擬定時(shí)器管理,定時(shí)器到期后觸發(fā)信號(hào)。' D0 f( S" O2 P" j7 k% N* n4 ?
    ( Z! v/ C/ `8 U& T" x
    SIGWINCH (28), G% e% x; h2 X: E0 r  e
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:當(dāng)終端窗口調(diào)整大小時(shí),前臺(tái)進(jìn)程會(huì)接收到此信號(hào)。2 o' z* e. w" V0 l
    6 Z& \- Z( ]) X- ~7 v
    2 `* L1 Y! |. r' x/ k5 }
    SIGPOLL/SIGIO (29)
    + u% B) [0 T* r1 O8 o( h; m( L/ ~
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于異步I/O操作,通知進(jìn)程文件描述符的I/O事件。5 j0 [; R4 r' u! T3 B. Z

    7 o) X8 g) w/ r" u8 rSIGSYS (31)
    * z5 H- `/ A* k  U$ n9 Y
  • 觸發(fā)方式:進(jìn)程發(fā)起了無(wú)效的系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯(cuò)誤。
    $ U7 i, }. C- k1 F
      Y- p6 i. e  A! ?2 p% d
    這些信號(hào)為L(zhǎng)inux進(jìn)程提供了豐富的控制和通信機(jī)制。了解這些信號(hào)及其默認(rèn)行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。' I+ N. L1 s% V8 F* Y
    6 \! C# {. B( r* Q6 Q. n

    - L, M+ u5 Z1 l9 S/ L
    9 W5 d! e* Q$ @: z點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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