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

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

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

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

[復制鏈接]

563

主題

563

帖子

3385

積分

四級會員

Rank: 4

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

# p' j0 ]: G8 L點擊上方藍色字體,關注我們
/ m' R- w! w8 c信號是一種軟件中斷,用于通知進程發(fā)生了某種異步事件。信號可以由用戶、其他進程或操作系統(tǒng)內核產(chǎn)生。進程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統(tǒng)執(zhí)行默認操作。2 K; F0 p5 L( {( ^  W9 w! f+ O
0 X" U( N# S$ Y% M+ {) k
$ u$ R+ E: C9 f% e
* F+ b, I8 ]; [+ }
  • 不可靠信號(非實時信號):編號為 1~31 的信號。它們的行為可能因實現(xiàn)而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內連續(xù)到達,它們可能會合并成一個信號。
  • 可靠信號(實時信號):編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統(tǒng)上都是相同的。可靠信號不會合并,即使它們在短時間內連續(xù)到達。可靠信號支持排隊,這意味著如果一個可靠信號被阻塞,它將被存儲在隊列中,直到信號處理程序準備就緒。
    5 a/ X. B3 h+ n6 H
    & q1 @) }- P; f, w9 G
    常見信號的用途和系統(tǒng)默認操作如下:1 E* D% n! ^- u8 S: H1 D" B

    $ Y0 W# m3 s' Z2 Y) g
    ) E( G: S0 G7 i1 C# {: k: e. h
    , k4 U' G( _5 L6 D4 ~4 }/ oSIGINT (2)
    9 B4 {# e0 p- \' ~, W0 [* a
  • 觸發(fā)方式:當用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認操作:終止進程。
  • 描述:用于中斷正在運行的前臺進程,是常用的終止命令。4 `& S6 z1 U0 e7 W- D/ h& s
    + U! Y3 b4 A- R2 a5 J4 n$ ^

    $ A2 S8 j. T3 v8 z5 m, a4 k1 V. tSIGQUIT (3)+ B* F( S; i( u, S7 Q
  • 觸發(fā)方式:當用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認操作:終止進程并生成核心轉儲文件。
  • 描述:用于在程序進入無限循環(huán)或不響應時終止進程,并生成調試用的核心文件。$ I" n, q3 @* r# r% K7 e' p
    . S* c  w7 g9 Y% c; h( T( h3 N3 b$ o
    : B7 T2 ^+ i( I- n7 n. N" ~9 w% |4 ?/ N- O
    SIGILL (4)
    # Z4 s" Q0 Z8 p/ }' {
  • 觸發(fā)方式:進程嘗試執(zhí)行非法的機器語言指令。
  • 默認操作:終止進程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內存越界。/ I: c* C4 W+ X

    9 ]8 S* C9 h" {. R
    2 o* `- l" T3 _* Q8 \8 O# h
    SIGABRT (6). J& W6 t' b% `/ C4 s+ u  Q
  • 觸發(fā)方式:當進程調用abort()系統(tǒng)調用。
  • 默認操作:終止進程并生成核心轉儲文件。
  • 描述:用于指示進程自身發(fā)現(xiàn)了嚴重錯誤,并請求自我終止。
    ; |1 K# D$ s  l5 k3 v* p

    * q" D3 Y; ^- ~$ H/ q/ a8 ]

    : H8 J' D7 x  L  o# L( u% ]SIGBUS (7)
    # a, W% C% k1 U/ {4 j5 A- u8 c
  • 觸發(fā)方式:發(fā)生總線錯誤(例如錯誤的內存訪問)。
  • 默認操作:終止進程。
  • 描述:指示內存訪問沖突,通常與硬件有關。
    8 R3 t0 J# l9 K$ r. ~# O2 V% k# E

    1 ^0 r) I9 r! ]- I4 r2 R
    4 K5 T" p! c% c; c* X2 z- Y  d
    SIGFPE (8)
    ( V2 h6 S$ Z% }' O" K8 L+ E3 U
  • 觸發(fā)方式:特定類型的算術錯誤(例如除以零)。
  • 默認操作:終止進程。
  • 描述:用于表示浮點運算錯誤或其他算術異常。
    3 v- |) l' B0 \9 U2 T8 a. ~1 _' f
    ! a1 j/ V8 K+ F) w1 F" E. b7 [

    : X9 l; l6 B* q( f6 O$ \SIGKILL (9)
    & U/ M$ k; h" g" q' M0 F) V, B
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認操作:立即終止進程。
  • 描述:是無法被捕獲或忽略的“必殺”信號,用于強制終止進程。
    6 J1 P2 L( M" `- G1 o3 n1 N

    6 D% u! @2 z- o+ y' M- A3 O
    9 m+ x" f( I. h3 E/ z4 \* T
    SIGUSR1 (10)4 i7 y7 u  T+ U
  • 觸發(fā)方式:用戶定義的信號,供程序員自定義使用。
  • 默認操作:終止進程。
  • 描述:用戶程序可以使用此信號進行進程間通信或事件通知。( G2 ^7 g( K0 H1 Y( P% g6 j& X4 T

    ' @. F' `( W3 n; [3 ]. S$ u" M
    * Z" h2 E' g# ^0 m+ P9 c& b- w7 m
    SIGSEGV (11), |6 ]6 x/ g- b. a/ T+ L# \
  • 觸發(fā)方式:進程嘗試訪問無效的內存地址。
  • 默認操作:終止進程。
  • 描述:常見于指針錯誤或無效內存訪問操作,通常會導致程序崩潰。
    # _: x/ K- l  o4 }: [

    " v1 g9 u! h! e: B
    7 M1 b! ~! u" n  D$ h
    SIGUSR2 (12)
    ) ?' z. U* ?6 Q1 s" z
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認操作:終止進程。
  • 描述:供程序員自定義,用于進程間通信或自定義處理邏輯。) H  Y8 g3 ^. f1 `& x# H
    / }$ @" T' ^' c1 u# X+ w; V
    . p' x9 k, v9 y: V
    SIGPIPE (13)7 G' e5 \6 F' u- w- f9 B) }5 d
  • 觸發(fā)方式:進程向已關閉的管道或套接字寫入數(shù)據(jù)。
  • 默認操作:終止進程。
  • 描述:當嘗試向無效的通信通道寫入數(shù)據(jù)時觸發(fā),通常用于通知進程通信失敗。
    & ?/ k# ]& v+ r7 e0 ?2 ^

    & H8 h8 p6 p+ ?) ~/ G2 q; c5 ?9 a
    . \0 R" M: N) R! b) S4 r8 O8 D$ u
    SIGALRM (14)
    ! Q/ b6 [" z! `2 g$ ?+ d
  • 觸發(fā)方式:定時器到期(由alarm()或setitimer()設置)。
  • 默認操作:終止進程。
  • 描述:常用于定時操作,信號觸發(fā)后通常終止程序或進行某種處理。
    , {5 \9 Z5 Y( ~6 M$ y9 Y

    3 l" t- p7 ?5 ?0 k& N+ B$ L3 f
    9 C" h, G8 w& T" a/ ^6 N& h$ i
    SIGTERM (15)2 _, s( a+ B. Y
  • 觸發(fā)方式:通過kill命令(不帶-9選項)。
  • 默認操作:終止進程。
  • 描述:用于請求進程正常終止,通常用于優(yōu)雅地關閉應用程序。
    3 H5 {" H( Q2 p7 e

    8 _+ I- D$ j! ]% U; G6 C

    5 C& }! {4 d! BSIGCHLD (17)
    : J! d% T3 |5 `
  • 觸發(fā)方式:子進程終止或狀態(tài)改變。
  • 默認操作:忽略信號。
  • 描述:父進程用來得知子進程終止或狀態(tài)改變,默認忽略,父進程可選擇處理。  p# B+ N6 U2 v8 q0 m( r

    / S+ c4 `6 @( m$ \) l7 j7 E5 D

    ( V  ~1 A$ k0 ^4 Q& _9 {SIGCONT (18)2 S; m4 V, p4 W; V5 `: N- x
  • 觸發(fā)方式:恢復已停止的進程。
  • 默認操作:繼續(xù)運行進程。
  • 描述:發(fā)送給已停止的進程,使其恢復執(zhí)行。
    5 q. a6 d+ T5 z) f9 j- e+ k

    1 U, F5 |6 d8 Y5 T3 ?& g0 r  l
    & w  T* A6 t& K, ?) P4 S7 v
    SIGSTOP (19); ^$ _4 i& e9 o) }& R
  • 觸發(fā)方式:強制停止進程。
  • 默認操作:停止進程。
  • 描述:無法捕獲或忽略的“必停”信號,用于暫停進程執(zhí)行。
    / k: g7 W4 `- T
    $ x& ]0 [. q: V. D  ~
    5 I5 _1 \6 C  Q2 t3 i+ }+ o8 N; C
    SIGTSTP (20)% e! Q6 ?  v3 y. r, e  J% m
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認操作:停止進程。
  • 描述:用于暫停前臺進程組中的進程,常用于暫停任務。/ I' P+ K8 l! a0 d

    . R) O7 M- o+ d  N+ z& f8 L
    0 ~5 ^/ n1 E8 _' s' m2 G" \
    SIGXCPU (24)
    6 j, R9 Q) y. J2 Z4 h, l: ~
  • 觸發(fā)方式:進程CPU時間超出限制。
  • 默認操作:終止進程。
  • 描述:通常用于檢測進程占用CPU過多時間,可能引發(fā)警告或終止進程。) L# c- [5 C' r( m2 S# I8 R
    2 E( y" r% A) L  E/ Q: l7 d  A

    6 p+ i% k, [. x( a' Z6 b3 bSIGVTALRM (26)
    9 K* w7 p$ v# H1 @3 |) e! D1 ]# k
  • 觸發(fā)方式:虛擬定時器到期(由setitimer()設置)。
  • 默認操作:終止進程。
  • 描述:用于虛擬定時器管理,定時器到期后觸發(fā)信號。
    ) d+ Z( J# J. ]3 O6 C3 J( Y; K( r

    , v# I; P! C# g' c3 jSIGWINCH (28)$ m: G& k" N7 [
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認操作:忽略信號。
  • 描述:當終端窗口調整大小時,前臺進程會接收到此信號。9 q& A4 I1 W' Z2 P$ t) T0 k& [

    3 n) X9 D8 E2 F5 d8 T4 _: m

    ( r2 }3 E- j8 }  t4 y4 S2 ?. C) |( GSIGPOLL/SIGIO (29)# A/ l! X( d$ ]$ j3 u# Y
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認操作:終止進程。
  • 描述:用于異步I/O操作,通知進程文件描述符的I/O事件。
    % {6 \3 F1 Z5 _+ @

    8 B4 G6 [; f  Q: |SIGSYS (31)4 [9 L' `% e2 B# [0 c% {
  • 觸發(fā)方式:進程發(fā)起了無效的系統(tǒng)調用。
  • 默認操作:終止進程。
  • 描述:通常用于捕獲非法系統(tǒng)調用或程序錯誤。8 O7 h; A5 w' Y9 t% A, @
    9 E( q/ {6 n8 h" b! x: R) N1 \
    這些信號為Linux進程提供了豐富的控制和通信機制。了解這些信號及其默認行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。
    9 r" O5 R9 {' M
    : L" |6 r8 Z0 o8 z # a: j+ i; V1 B! h4 t$ y: L

    & E! _! j2 }5 ?( {- G6 a* F點擊閱讀原文,更精彩~
  • 回復

    使用道具 舉報

    發(fā)表回復

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

    本版積分規(guī)則


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