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

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

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

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

[復(fù)制鏈接]

563

主題

563

帖子

3385

積分

四級會員

Rank: 4

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

1 t5 I0 q% a; g* o% `( b點(diǎn)擊上方藍(lán)色字體,關(guān)注我們8 _" d+ _; j  c! k7 H" Q# z: @3 X
信號是一種軟件中斷,用于通知進(jìn)程發(fā)生了某種異步事件。信號可以由用戶、其他進(jìn)程或操作系統(tǒng)內(nèi)核產(chǎn)生。進(jìn)程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統(tǒng)執(zhí)行默認(rèn)操作。
* `( g' I: f+ w% E$ b0 a- |5 [. B, H# [4 H. x4 w% q5 T4 A
8 Z6 z; E! [  h" G& |

/ o5 U, }1 H, q
  • 不可靠信號(非實(shí)時信號):編號為 1~31 的信號。它們的行為可能因?qū)崿F(xiàn)而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內(nèi)連續(xù)到達(dá),它們可能會合并成一個信號。
  • 可靠信號(實(shí)時信號):編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統(tǒng)上都是相同的?煽啃盘柌粫喜,即使它們在短時間內(nèi)連續(xù)到達(dá)?煽啃盘栔С峙抨(duì),這意味著如果一個可靠信號被阻塞,它將被存儲在隊(duì)列中,直到信號處理程序準(zhǔn)備就緒。! S7 K& ]/ B" v. z- L  Z
    * r+ Y: i9 k" |5 c
    常見信號的用途和系統(tǒng)默認(rèn)操作如下:
    8 @  m4 S1 V/ P8 x' |9 A' l+ r0 V8 ~8 s3 K
    - k' j1 [0 D0 `$ y
    - @5 w. |, _" [
    SIGINT (2), s2 v  p$ g# V! ]* Y
  • 觸發(fā)方式:當(dāng)用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于中斷正在運(yùn)行的前臺進(jìn)程,是常用的終止命令。
    % N, v9 S; R+ w: p$ J
    / f( n+ A: @3 v& w
    & x3 ^- R0 |2 V8 r$ ]. {
    SIGQUIT (3)
    * r9 t+ t0 N+ E) a
  • 觸發(fā)方式:當(dāng)用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲文件。
  • 描述:用于在程序進(jìn)入無限循環(huán)或不響應(yīng)時終止進(jìn)程,并生成調(diào)試用的核心文件。# p: |+ W& Z' W. B% c3 p
    ( s6 j6 }. v+ M! B0 J, B# h' p

      ?3 ?4 R* B2 k/ f% O9 NSIGILL (4)$ {5 p6 b3 Y8 Z7 ~6 E
  • 觸發(fā)方式:進(jìn)程嘗試執(zhí)行非法的機(jī)器語言指令。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。
    : j% q# g4 o3 T/ z; l0 f& m

    + [, s4 \: h# p" J
    & J5 @( b6 `3 c1 R- P
    SIGABRT (6)
    ' ^1 g7 i3 T: T+ u+ \( h4 I4 c0 l
  • 觸發(fā)方式:當(dāng)進(jìn)程調(diào)用abort()系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲文件。
  • 描述:用于指示進(jìn)程自身發(fā)現(xiàn)了嚴(yán)重錯誤,并請求自我終止。) V6 B  d3 R/ A7 W! z5 v/ r

    8 O! s* a+ d& a; F. f" G

    ; x; ~5 d' K6 o' C+ i- P5 k  PSIGBUS (7)1 Z3 _/ x& y- J5 O. F2 Y" A! x
  • 觸發(fā)方式:發(fā)生總線錯誤(例如錯誤的內(nèi)存訪問)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關(guān)。  r1 k' s2 T' f
      a) q6 o0 s  ~7 J1 m
    & t, @( f: ^7 t- G" F- O8 X" P- F& Y) l
    SIGFPE (8)
    ) j  }. l4 a& ?6 {5 Y# b
  • 觸發(fā)方式:特定類型的算術(shù)錯誤(例如除以零)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于表示浮點(diǎn)運(yùn)算錯誤或其他算術(shù)異常。
    , j$ y* t) ~3 ^8 Z: i3 @1 d

    6 ~: I1 y& X& t1 m4 ~% _2 s4 N$ {
    9 |1 |9 W, c  }( V3 N
    SIGKILL (9): C$ x$ S0 C: c, r+ {
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認(rèn)操作:立即終止進(jìn)程。
  • 描述:是無法被捕獲或忽略的“必殺”信號,用于強(qiáng)制終止進(jìn)程。
    5 {9 K) L+ k) A9 d
    " j2 L! c9 B0 G5 I% L& w
    % W/ z) C+ v" ]; z/ P+ S3 F
    SIGUSR1 (10)
    5 I- l6 [& q: Q8 j5 C) L& I
  • 觸發(fā)方式:用戶定義的信號,供程序員自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用戶程序可以使用此信號進(jìn)行進(jìn)程間通信或事件通知。: t4 f/ y* E* I% X! s$ O+ ?
    6 o! w, B) |: R; L7 w6 J: f! [

    " C5 ^. j# Z; @- ^SIGSEGV (11)
    ' C  \8 Q" ~. v' a4 Z) v: w
  • 觸發(fā)方式:進(jìn)程嘗試訪問無效的內(nèi)存地址。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常見于指針錯誤或無效內(nèi)存訪問操作,通常會導(dǎo)致程序崩潰。9 O+ h+ ]% e4 E/ K# z' R& T( {

    7 p0 }4 d, q8 y7 E
    . x, C$ z( N' \' \, u
    SIGUSR2 (12)& s' g0 ^9 M9 g0 V$ w
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:供程序員自定義,用于進(jìn)程間通信或自定義處理邏輯。" S' s7 V: c3 o1 q4 e# ^

    : O9 m. C% K# |( {
    ' L# B3 _" \0 ~
    SIGPIPE (13)3 t$ y& g& h# g4 e
  • 觸發(fā)方式:進(jìn)程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:當(dāng)嘗試向無效的通信通道寫入數(shù)據(jù)時觸發(fā),通常用于通知進(jìn)程通信失敗。
    4 s) x, j: Y6 Y% k

    3 ?4 Q! S3 U/ X3 x! L& t) |

    : V( r4 Y: n7 c; oSIGALRM (14). c, J) J  D- m" I: e
  • 觸發(fā)方式:定時器到期(由alarm()或setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常用于定時操作,信號觸發(fā)后通常終止程序或進(jìn)行某種處理。
    8 C; M/ y, o$ R" @3 w  P/ O

    6 x$ f1 g1 d! r' [% J

    8 {0 Q3 t: H( aSIGTERM (15)
    7 [/ S$ [4 c+ d
  • 觸發(fā)方式:通過kill命令(不帶-9選項(xiàng))。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于請求進(jìn)程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。
      o4 e0 K! {* x: m' P. R

    ! N" v1 [0 F/ b2 F
    / q  N2 D4 I+ }6 \
    SIGCHLD (17)
    ( o2 a5 L2 m' L# f
  • 觸發(fā)方式:子進(jìn)程終止或狀態(tài)改變。
  • 默認(rèn)操作:忽略信號。
  • 描述:父進(jìn)程用來得知子進(jìn)程終止或狀態(tài)改變,默認(rèn)忽略,父進(jìn)程可選擇處理。8 i- {( v/ c0 m. V/ V
      p# S& U* U7 t1 @- ~2 B( u

    ' y6 \4 `, X/ HSIGCONT (18)
    4 o# f+ T! h' n" o9 D  U$ s
  • 觸發(fā)方式:恢復(fù)已停止的進(jìn)程。
  • 默認(rèn)操作:繼續(xù)運(yùn)行進(jìn)程。
  • 描述:發(fā)送給已停止的進(jìn)程,使其恢復(fù)執(zhí)行。
    * a) F3 l0 Q8 y! E3 i" c

    ! G4 _$ a/ n) H8 B- B3 n
    7 K) @) o9 |2 G# }
    SIGSTOP (19)
      m) d6 _" N: R5 M; v. S
  • 觸發(fā)方式:強(qiáng)制停止進(jìn)程。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:無法捕獲或忽略的“必!毙盘,用于暫停進(jìn)程執(zhí)行。3 _2 \! ~, u! Q: E

    9 U6 r. d: J5 @2 H* r

    # D$ ?) [+ C: O* \SIGTSTP (20)
    " P4 p. h" z: T/ M3 P. Z8 M
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:用于暫停前臺進(jìn)程組中的進(jìn)程,常用于暫停任務(wù)。
    - m6 w/ g& D, c2 p3 h
    / P" {! G5 Y/ g) E. N
    , O9 M) c6 ~  p6 Q& p
    SIGXCPU (24)
    7 y* R# _9 q3 ~4 W! o2 i2 s
  • 觸發(fā)方式:進(jìn)程CPU時間超出限制。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于檢測進(jìn)程占用CPU過多時間,可能引發(fā)警告或終止進(jìn)程。; d9 X+ V; @: \4 p
    3 i3 Y- ^. p& w. I( o
    . R0 v  S7 W: _' o& j3 J$ n
    SIGVTALRM (26)
    ' q- O# ]( v/ |2 z" {/ E
  • 觸發(fā)方式:虛擬定時器到期(由setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于虛擬定時器管理,定時器到期后觸發(fā)信號。
    . S. w' Q8 c0 X4 J9 {3 @( ^

    8 L4 V2 ^0 |4 V/ kSIGWINCH (28)
    6 p7 H( M7 @2 E; {# C# K$ u, H
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認(rèn)操作:忽略信號。
  • 描述:當(dāng)終端窗口調(diào)整大小時,前臺進(jìn)程會接收到此信號。
    8 V( u$ M, b, Z% f% R# s

    9 T. `$ A* ^# z% R

    % X3 B, C+ x6 e$ C7 x! G8 b$ F7 \SIGPOLL/SIGIO (29)( ]+ }/ c( \0 m# M" q% B* \2 ^8 k
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于異步I/O操作,通知進(jìn)程文件描述符的I/O事件。* G; D+ a$ `; t& A/ n2 W

    % X2 M* }& q- e* N+ j# e* S. O1 gSIGSYS (31)' W$ _+ O+ V( Q5 e
  • 觸發(fā)方式:進(jìn)程發(fā)起了無效的系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯誤。
    7 V. {% b+ P) D( G8 k* }. s

    / U2 e: K* y6 P7 c這些信號為Linux進(jìn)程提供了豐富的控制和通信機(jī)制。了解這些信號及其默認(rèn)行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。4 Q& ~1 z, F) x" G  E; @

    ( _0 f5 \& _; y: E5 p+ g
    * v  |/ o2 R% s
      b7 t7 h. M& z% e點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

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

    本版積分規(guī)則


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