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

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

搜索
查看: 25|回復(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覽 |閱讀模式

; S7 S! Y) l* ^+ A& F點(diǎn)擊上方藍(lán)色字體,關(guān)注我們+ E& H( a2 X$ o/ a% z9 a
信號(hào)是一種軟件中斷,用于通知進(jìn)程發(fā)生了某種異步事件。信號(hào)可以由用戶、其他進(jìn)程或操作系統(tǒng)內(nèi)核產(chǎn)生。進(jìn)程可以選擇捕獲并處理這些信號(hào),或者忽略它們,讓系統(tǒng)執(zhí)行默認(rèn)操作。
9 \; n% x( J' R$ U! U/ u7 R3 P: ~7 W" n  b  ^% W

# X+ t( ]8 U! E1 J5 y$ _$ X; [1 m  G% C9 S3 i- T; r) i
  • 不可靠信號(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)備就緒。
    9 G! q* B5 P& @) b

    % d( u* c" \! R4 E2 j4 l" K常見信號(hào)的用途和系統(tǒng)默認(rèn)操作如下:
    ; x5 I8 d0 L: f5 m4 B( j
    . i; h* L! O4 Y9 [
    : Z( H- u! L. G2 B0 u1 b# U4 T+ r! W, [. |' n! d9 C% S: C- S
    SIGINT (2)% m( ~9 r, u% _: q0 E0 ~4 N9 e
  • 觸發(fā)方式:當(dāng)用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于中斷正在運(yùn)行的前臺(tái)進(jìn)程,是常用的終止命令。
    ; k) |" y, s: v$ y
    2 w- W) Q4 B* L/ \- N9 X% S, @& P& W

    5 q- r- g9 l3 ^. V4 USIGQUIT (3)6 b3 ]; G; T& R5 G0 O! j, H- z
  • 觸發(fā)方式:當(dāng)用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲(chǔ)文件。
  • 描述:用于在程序進(jìn)入無(wú)限循環(huán)或不響應(yīng)時(shí)終止進(jìn)程,并生成調(diào)試用的核心文件。' `) Z- D' C3 b7 R' x0 K  q% |/ e

    " {, \' h* N1 v4 T" ]8 I5 p3 ?/ W
    $ q6 B6 W9 O" B( \( n
    SIGILL (4)9 I+ Z2 @1 u, a* m5 i
  • 觸發(fā)方式:進(jìn)程嘗試執(zhí)行非法的機(jī)器語(yǔ)言指令。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于指示程序執(zhí)行了無(wú)效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。" w- A. V* U- P, P
    : j+ r1 P  p' k8 D* M) C- w' [
    5 ~" A" \* U( A- q$ T/ _; Q2 v: q
    SIGABRT (6)
    ' l( M8 h1 H2 f5 O
  • 觸發(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)求自我終止。! b. n( @7 s+ K- _. A' `8 v

    * |, t4 ]. y9 U' P5 F
    2 B, K9 g; m5 e) g
    SIGBUS (7)
    ' T! }: Q4 w$ E& O5 r9 [
  • 觸發(fā)方式:發(fā)生總線錯(cuò)誤(例如錯(cuò)誤的內(nèi)存訪問)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關(guān)。
    & a8 }' w5 {6 u) d! j! l

    # y7 p% K8 Z* p, l" k  e, J' Y
    0 i; o6 a( ~! ?4 w6 W# O& L4 B3 l; D
    SIGFPE (8)8 W2 z4 @0 O7 r+ P, X
  • 觸發(fā)方式:特定類型的算術(shù)錯(cuò)誤(例如除以零)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于表示浮點(diǎn)運(yùn)算錯(cuò)誤或其他算術(shù)異常。
    + X2 D+ h6 s: C$ z, b: S/ g
    " I5 H, ?/ B& O% D: r" u: Z

    - q3 I' B3 V- ^* \3 T" ZSIGKILL (9): c" u& c6 c; G9 W: _* B/ K
  • 觸發(fā)方式:通過(guò)kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認(rèn)操作:立即終止進(jìn)程。
  • 描述:是無(wú)法被捕獲或忽略的“必殺”信號(hào),用于強(qiáng)制終止進(jìn)程。" D  I3 w& b! n* D6 S9 B/ ?$ W

    2 _6 N/ P7 V- E! l9 S- d

    * t% S0 w5 h% h5 c9 F& KSIGUSR1 (10)
    4 F" N8 R* T+ z  l$ J9 f+ g- b3 U
  • 觸發(fā)方式:用戶定義的信號(hào),供程序員自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用戶程序可以使用此信號(hào)進(jìn)行進(jìn)程間通信或事件通知。; p* q/ ~( P( a5 [6 p/ o& _

    9 Q% Y/ y9 F  `2 I+ r

    & s, J/ ~4 H! u6 ?* y! c7 VSIGSEGV (11)( z% V. v9 |1 t+ Q2 E6 d3 E# Z+ ~
  • 觸發(fā)方式:進(jìn)程嘗試訪問無(wú)效的內(nèi)存地址。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常見于指針錯(cuò)誤或無(wú)效內(nèi)存訪問操作,通常會(huì)導(dǎo)致程序崩潰。
    , p8 Q  k. g+ X6 [& N6 P2 @$ b
    ) m* k7 q+ h9 R# w

    2 k6 G; w5 K6 H* M; d. F* gSIGUSR2 (12)
    + W" A1 @3 L4 [7 l$ u
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:供程序員自定義,用于進(jìn)程間通信或自定義處理邏輯。- W. z+ d% I5 Y7 w8 Q7 Z' q  R
    , r  b4 W- t4 M

    4 I" C8 o3 x- h- W5 OSIGPIPE (13)! ?$ \! u  B0 J1 @
  • 觸發(fā)方式:進(jìn)程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:當(dāng)嘗試向無(wú)效的通信通道寫入數(shù)據(jù)時(shí)觸發(fā),通常用于通知進(jìn)程通信失敗。
    5 W  M7 }1 p- h
      I/ |4 ^( b/ n1 L  t( O0 h+ _0 J

    & B* ?% |4 v. A# u4 @SIGALRM (14)% e7 X: C  @$ V: y* S+ o
  • 觸發(fā)方式:定時(shí)器到期(由alarm()或setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常用于定時(shí)操作,信號(hào)觸發(fā)后通常終止程序或進(jìn)行某種處理。
    ! M5 v; a  l# N# W+ H

    7 s7 L1 Q8 c% `- Q
    ; }% A3 [# t- _6 j0 S$ K
    SIGTERM (15)
    ; f1 B( T) a4 U0 D2 {& U) J
  • 觸發(fā)方式:通過(guò)kill命令(不帶-9選項(xiàng))。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于請(qǐng)求進(jìn)程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。2 v7 v5 T  G0 V- f: ~" c) z
    2 U" Y- O) S( U3 G0 s
    5 @( E) `  J( c1 O0 V$ J! r
    SIGCHLD (17)
      F5 T) R( C0 t$ w4 X. y
  • 觸發(fā)方式:子進(jìn)程終止或狀態(tài)改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:父進(jìn)程用來(lái)得知子進(jìn)程終止或狀態(tài)改變,默認(rèn)忽略,父進(jìn)程可選擇處理。1 y: d( z) `3 U! f) {9 h4 a

    2 ~  Z  r, M6 d8 x6 G5 p0 v
    8 Y! p' ~& H7 Y9 L* c. [  M
    SIGCONT (18)
    * ^1 ]/ b( Y9 B. n; W
  • 觸發(fā)方式:恢復(fù)已停止的進(jìn)程。
  • 默認(rèn)操作:繼續(xù)運(yùn)行進(jìn)程。
  • 描述:發(fā)送給已停止的進(jìn)程,使其恢復(fù)執(zhí)行。3 w' X4 [$ z+ }

    8 G. B" A! ?2 I7 i
    7 F: c1 v6 w! r. S, ~' B6 o" F
    SIGSTOP (19)
    8 |& X( t1 |0 q" h, V2 l
  • 觸發(fā)方式:強(qiáng)制停止進(jìn)程。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:無(wú)法捕獲或忽略的“必停”信號(hào),用于暫停進(jìn)程執(zhí)行。( m1 o8 n& {# d  H
    ( C1 U7 G, Y9 m( n7 v/ J
    5 I/ }$ J3 c( ]8 E1 V! s0 V9 ?
    SIGTSTP (20)
    6 q7 D7 f. f/ E3 \6 x# a
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:用于暫停前臺(tái)進(jìn)程組中的進(jìn)程,常用于暫停任務(wù)。; N0 b; _  k0 G) d
    7 h& h6 K" i# p; V( x& b
    8 h& i: M, H7 P" C6 t
    SIGXCPU (24)9 _' _: N4 a" L$ U0 [, a" F& ?1 L
  • 觸發(fā)方式:進(jìn)程CPU時(shí)間超出限制。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于檢測(cè)進(jìn)程占用CPU過(guò)多時(shí)間,可能引發(fā)警告或終止進(jìn)程。- N, H: P1 w. L9 s# d1 |$ v2 V
    + W. {  t' t" w7 |6 J# q( ]

    : G( r) }6 t, V0 r8 p/ f/ y& bSIGVTALRM (26)
    9 T$ ^; i/ ?# [7 y) t
  • 觸發(fā)方式:虛擬定時(shí)器到期(由setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于虛擬定時(shí)器管理,定時(shí)器到期后觸發(fā)信號(hào)。; S  `7 Y5 U, \6 U: [& ^0 h( d
    ( K  A! u$ y% G( E
    SIGWINCH (28)
    9 C6 b6 T7 w' n7 s
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:當(dāng)終端窗口調(diào)整大小時(shí),前臺(tái)進(jìn)程會(huì)接收到此信號(hào)。: E2 B) w  Q2 [7 I1 F

    + I/ x! q% S" J
    + v& E8 b& A# a2 v( p) ?
    SIGPOLL/SIGIO (29)) ^9 @. i$ H3 A5 Q4 ?: z! O2 t. G9 K
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于異步I/O操作,通知進(jìn)程文件描述符的I/O事件。
    + P2 z  b9 T* ^, v2 E

    ! s8 f) S* i; B9 MSIGSYS (31)
    , I/ `' n3 W. t+ ~2 I; z; S6 x7 g4 r5 O
  • 觸發(fā)方式:進(jìn)程發(fā)起了無(wú)效的系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯(cuò)誤。
    2 c7 D0 B+ F) U8 m* S, J
    + Y1 \2 M, I  E) I$ s
    這些信號(hào)為L(zhǎng)inux進(jìn)程提供了豐富的控制和通信機(jī)制。了解這些信號(hào)及其默認(rèn)行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。
    4 f5 w4 m7 A0 f- A; H  A( K' d& I7 q

    4 Y, C$ I+ V2 f) k9 P
    ! u# u1 b+ m& M2 H點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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