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

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

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

! O4 @6 N/ j, O' ]' _- g( r4 x點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
+ x  f: K& {/ ]8 a; [0 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)操作。
- S6 \) b: ?3 d" G
+ n& l" ?. p+ l5 B2 |) j+ d: t ; {, X7 R- k( H0 D+ [
" i  S* ]: a4 J& p9 p- |
  • 不可靠信號(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)備就緒。
    . A9 a5 D8 g2 y

    9 A( T, x- [5 t1 g, |$ v2 O0 g常見信號(hào)的用途和系統(tǒng)默認(rèn)操作如下:
    ) e  A. ]/ c2 r. k0 x2 V, o# ?' J5 {, v$ `" A9 I8 y
    ; w  {8 U$ k0 ~' a$ i
    . i2 V/ ?" y1 i, F- `" ?
    SIGINT (2)4 H1 W  q6 I7 y  Y: N
  • 觸發(fā)方式:當(dāng)用戶在終端按下中斷字符(通常是CTRL+C)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于中斷正在運(yùn)行的前臺(tái)進(jìn)程,是常用的終止命令。) w& c* u. V! `. p

      E  n8 M% [% m$ x7 Y

    ' y; l! Y) ?( _3 ASIGQUIT (3)
    6 z4 z  l/ x' q5 s  H3 {
  • 觸發(fā)方式:當(dāng)用戶在終端按下退出字符(通常是CTRL+\)。
  • 默認(rèn)操作:終止進(jìn)程并生成核心轉(zhuǎn)儲(chǔ)文件。
  • 描述:用于在程序進(jìn)入無限循環(huán)或不響應(yīng)時(shí)終止進(jìn)程,并生成調(diào)試用的核心文件。& X& H4 f) ?9 \7 L6 p
    % a& y5 i& z% }: J
    3 d2 ]+ t, D/ e" [) X8 S
    SIGILL (4)
    4 l9 L1 N8 k& k8 y
  • 觸發(fā)方式:進(jìn)程嘗試執(zhí)行非法的機(jī)器語言指令。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內(nèi)存越界。
    " Y) U) T4 X0 Q

    : N. J+ _5 D  J8 c# R- `4 z
    / ^! K% S+ l% `- B
    SIGABRT (6)
    . S# w7 y  W; @* p0 A# [
  • 觸發(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)求自我終止。
    ) t2 b& O* N4 Q! W6 Z

    * @7 ?* D  U/ S; ~$ h1 J

    ) `2 j2 r2 ~9 i5 LSIGBUS (7). X2 i7 T2 f5 n
  • 觸發(fā)方式:發(fā)生總線錯(cuò)誤(例如錯(cuò)誤的內(nèi)存訪問)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:指示內(nèi)存訪問沖突,通常與硬件有關(guān)。4 T. Z" r  @1 F- ~" O

    " N9 M4 Y3 j% {# H- q; I; ~
    . `" y# A9 Y4 J. Y9 h0 y) J
    SIGFPE (8)* f( {, m5 h; g
  • 觸發(fā)方式:特定類型的算術(shù)錯(cuò)誤(例如除以零)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于表示浮點(diǎn)運(yùn)算錯(cuò)誤或其他算術(shù)異常。
    8 _  s2 _* U: N1 }8 u, C7 y

    9 M6 l0 F7 u0 t
    5 i5 p1 s! K: s- p2 }
    SIGKILL (9)
    & i; ^% r8 h. O( a
  • 觸發(fā)方式:通過kill -9命令或系統(tǒng)直接發(fā)送。
  • 默認(rèn)操作:立即終止進(jìn)程。
  • 描述:是無法被捕獲或忽略的“必殺”信號(hào),用于強(qiáng)制終止進(jìn)程。
    $ B1 E: D2 W: a* j% A2 u
    ! m1 f3 c! ^: E: o# h" y! q

    9 v, y! r5 j7 b+ r5 V  @# PSIGUSR1 (10)
    , I/ X' E% t, h" G+ H
  • 觸發(fā)方式:用戶定義的信號(hào),供程序員自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用戶程序可以使用此信號(hào)進(jìn)行進(jìn)程間通信或事件通知。: U5 ]- m4 D% k7 b/ Q0 M

    $ H4 G0 r- k* a! G  c# a- T

    - B1 P9 g0 z( q6 |: jSIGSEGV (11)3 M/ m# y4 k9 U& L) }$ D" K, E  n
  • 觸發(fā)方式:進(jìn)程嘗試訪問無效的內(nèi)存地址。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常見于指針錯(cuò)誤或無效內(nèi)存訪問操作,通常會(huì)導(dǎo)致程序崩潰。. G  g& u6 `% u$ G

    , C6 Z4 ?% b7 I4 L# V
    + z# |6 v! V  I& |
    SIGUSR2 (12)" C; y1 p6 B2 }' M: r, P/ l  N/ Y
  • 觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:供程序員自定義,用于進(jìn)程間通信或自定義處理邏輯。- b, V: O9 Y- w0 e( n

    ; P) F0 d& i- C' ?) D1 c% X8 Q( z

    8 }! y6 I8 N6 b* z# U/ fSIGPIPE (13)8 j0 j  _, z9 e5 V. o
  • 觸發(fā)方式:進(jìn)程向已關(guān)閉的管道或套接字寫入數(shù)據(jù)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:當(dāng)嘗試向無效的通信通道寫入數(shù)據(jù)時(shí)觸發(fā),通常用于通知進(jìn)程通信失敗。* z+ s7 U; e0 p) E. w  {3 w

    ; ]3 i" C. t2 j4 H/ E- Q1 S
    - K' m) j3 h" E' k" h
    SIGALRM (14)
    2 w2 H% [2 v0 y* b
  • 觸發(fā)方式:定時(shí)器到期(由alarm()或setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:常用于定時(shí)操作,信號(hào)觸發(fā)后通常終止程序或進(jìn)行某種處理。; ?# W* V& u- p% W- c; p# X3 _

    . m5 _' V0 s  _: b

    9 i6 t  ]: j! OSIGTERM (15)- e6 i* X( Y/ K
  • 觸發(fā)方式:通過kill命令(不帶-9選項(xiàng))。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于請(qǐng)求進(jìn)程正常終止,通常用于優(yōu)雅地關(guān)閉應(yīng)用程序。: k# @6 z+ e' b+ l7 i" a

    9 E9 J# J3 V7 L2 |3 D: l

    ; j* Q% _2 e0 U6 ?1 T* YSIGCHLD (17)0 t* T6 A+ P6 [) d
  • 觸發(fā)方式:子進(jìn)程終止或狀態(tài)改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:父進(jìn)程用來得知子進(jìn)程終止或狀態(tài)改變,默認(rèn)忽略,父進(jìn)程可選擇處理。
    4 d" w  E4 x7 U2 t6 W" t* m( s

    1 B. V0 i# M7 I. [) ]3 a
    ! D* m* V; V% u: C/ k
    SIGCONT (18)
    * b* t8 u7 R5 w% h
  • 觸發(fā)方式:恢復(fù)已停止的進(jìn)程。
  • 默認(rèn)操作:繼續(xù)運(yùn)行進(jìn)程。
  • 描述:發(fā)送給已停止的進(jìn)程,使其恢復(fù)執(zhí)行。( b0 J6 y% W2 C. A

    0 q: K' U% i. A; J2 V- a5 Y
    ) H' ^# ^# q& U# Q
    SIGSTOP (19). z+ J: X. F# }
  • 觸發(fā)方式:強(qiáng)制停止進(jìn)程。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:無法捕獲或忽略的“必停”信號(hào),用于暫停進(jìn)程執(zhí)行。. d2 @* c) _! u. I0 y

    + d) k' X! e9 N* F& D3 F

    ! C1 c+ t  _% w# O* JSIGTSTP (20)) [# B. K" v/ i. Y6 W6 i, e
  • 觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
  • 默認(rèn)操作:停止進(jìn)程。
  • 描述:用于暫停前臺(tái)進(jìn)程組中的進(jìn)程,常用于暫停任務(wù)。
    6 x2 ]& l& }, U4 |1 L# I4 e0 L

    0 \9 O: S3 b5 j# _! N& P, H# C
    * L+ T! L/ J# O- S# D6 m0 [2 Y
    SIGXCPU (24)7 M# B: B: \( L( l5 K% Z
  • 觸發(fā)方式:進(jìn)程CPU時(shí)間超出限制。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于檢測(cè)進(jìn)程占用CPU過多時(shí)間,可能引發(fā)警告或終止進(jìn)程。
    # f+ v- z) h% Z/ P& X

    7 w. p( u; r% n5 W  {

    9 n9 n% S5 z) ]! k  O! mSIGVTALRM (26)9 M! Y' ~) D7 W' ]- S4 e  S% p
  • 觸發(fā)方式:虛擬定時(shí)器到期(由setitimer()設(shè)置)。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于虛擬定時(shí)器管理,定時(shí)器到期后觸發(fā)信號(hào)。
    . L4 K0 _! Y& n. k

    , D1 r  m) a4 TSIGWINCH (28)9 W0 s2 p4 A, h& [
  • 觸發(fā)方式:終端窗口大小改變。
  • 默認(rèn)操作:忽略信號(hào)。
  • 描述:當(dāng)終端窗口調(diào)整大小時(shí),前臺(tái)進(jìn)程會(huì)接收到此信號(hào)。! G/ _8 {7 k. M# W) z0 F" l' u* Q

    5 s* h! h! z# Y5 t. m2 k8 _

    ( R9 p5 n5 Y. h7 g# vSIGPOLL/SIGIO (29)
    1 E9 a  R9 \. F# [* i9 ]6 a
  • 觸發(fā)方式:異步I/O事件發(fā)生。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:用于異步I/O操作,通知進(jìn)程文件描述符的I/O事件。% m2 Z& ?* C# ?1 E

    9 {6 N7 P0 j8 W' d0 x+ S- x* PSIGSYS (31)
    / _; v' x- ?  e/ y5 @% G( L
  • 觸發(fā)方式:進(jìn)程發(fā)起了無效的系統(tǒng)調(diào)用。
  • 默認(rèn)操作:終止進(jìn)程。
  • 描述:通常用于捕獲非法系統(tǒng)調(diào)用或程序錯(cuò)誤。8 @0 _/ p. A$ {/ R

    9 I3 h5 J9 `4 s& r這些信號(hào)為L(zhǎng)inux進(jìn)程提供了豐富的控制和通信機(jī)制。了解這些信號(hào)及其默認(rèn)行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。* ?/ F  B4 F9 U$ r# d; y) B  O# V
    ; f! q, j. d8 C8 e* |3 T

    9 q. x" s- A7 ^$ b; B( E
    $ ^7 u2 D6 _$ e3 H9 W點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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