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

PCB聯(lián)盟網

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

Linux進程狀態(tài)及轉換關系

[復制鏈接]

586

主題

586

帖子

3544

積分

四級會員

Rank: 4

積分
3544
跳轉到指定樓層
樓主
發(fā)表于 前天 08:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
( j8 r- I2 Z/ S5 }
點擊上方藍色字體,關注我們
; a( z! b) o+ v7 j0 @: X; A3 C6 Y" d2 l" x
在 Linux 系統(tǒng)中,進程狀態(tài)及其轉換關系是進程調度和管理的核心。我們可以將這些狀態(tài)視作進程在其生命周期中所處的不同階段。
& `6 }2 R5 X  Q8 `
& t, q( q! _0 k7 R7 f 7 I2 x/ k4 k! ]! u# ^. _. M
進程各狀態(tài)之間的切換5 j. P1 ?. h( R8 j+ O3 G4 s6 _
' ?( x8 C) w' P5 C9 n3 l' C
1、就緒態(tài)(Ready)7 v' D4 n- H  C
3 o4 c5 p0 o5 |$ u( F2 |9 p; |
就緒態(tài)表示進程已經具備執(zhí)行的條件,所有資源都已準備好,但由于 CPU 正在忙于執(zhí)行其他任務,進程暫時沒有獲得執(zhí)行權。1 i- P) Y' L" a4 ~

* c* I& m7 n  q* j+ \就緒態(tài)是動態(tài)的,當 CPU 變得空閑時,調度器會從就緒態(tài)鏈表中選擇一個進程進行執(zhí)行。
- m& E; Y" W' E$ A# k* {! L2 d9 R: W1 N0 G$ l. z
轉換關系:
8 B# \* S8 |+ a* K: t/ w
  • 從創(chuàng)建態(tài)進入就緒態(tài):進程在創(chuàng)建時進入就緒態(tài),等待被調度。
  • 從運行態(tài)回到就緒態(tài):當進程的時間片耗盡或 CPU 被其他更高優(yōu)先級的進程搶占,進程會回到就緒態(tài),等待下次調度。
    $ Y# ^/ R* a/ H4 J  }, y
    $ n& e. S9 `+ U7 F8 W
    2、運行態(tài)(Running)# H! u+ F2 C! h' Y% K
    運行態(tài)表示進程正在被 CPU 執(zhí)行。CPU 將按照調度算法分配給該進程時間片,允許其在有限時間內執(zhí)行。
    ) A* n0 a! W0 `# @& ~: m1 P3 l/ V- |  d* `1 m: U9 S! D; N/ d. ]! w; a
    轉換關系:
    8 P2 S" F  I+ s7 Q' W4 q- W6 @
  • 從就緒態(tài)進入運行態(tài):當調度器選中某個進程并為其分配 CPU 時,進程進入運行態(tài)。
  • 從運行態(tài)轉換到其他狀態(tài):
    ; V+ W' Q( Y) s% b0 t3 E* ]8 a
  • 如果進程時間片耗盡,會返回到就緒態(tài)。
  • 如果進程需要等待某種資源或事件,會進入睡眠態(tài)(等待態(tài))。
  • 進程也可以通過收到信號進入暫停態(tài)。
    4 v, }+ d$ U$ V" |9 |3 x; `+ e

    4 r0 p7 i  [# R4 k3、僵尸態(tài)(Zombie)
    & `$ p8 a5 ]+ K) K  N( P僵尸態(tài)進程(Zombie Process)是指進程已完成執(zhí)行,但其父進程尚未通過 wait() 或 waitpid() 系統(tǒng)調用獲取其退出狀態(tài)并清理資源。+ X. p' Z3 q  F2 Y5 ?+ V
    3 J1 N" S0 _1 [  x! w1 h( E7 @0 _
    因此,進程仍然保留著一個條目以供父進程讀取其退出狀態(tài)。
    3 z, n* U8 V& S/ ?
    9 e1 P$ Q& U; v( ]僵尸態(tài)進程不會消耗任何 CPU 資源,但其進程表項仍占用系統(tǒng)資源。
    % I* ]2 Q2 n5 Q9 H9 p( Y! x& o7 l. K" X0 O; S. z- e1 T; Q

    5 l1 ^* C6 V/ j! U" h7 {7 e/ t, P+ E轉換關系:
    3 D) `. l% K$ K! V! ~
  • 從運行態(tài)進入僵尸態(tài):當進程執(zhí)行完畢并調用 exit() 結束運行后,進入僵尸態(tài),等待父進程回收其資源。
  • 從僵尸態(tài)到消失:一旦父進程讀取子進程的退出狀態(tài),系統(tǒng)會刪除僵尸進程條目,釋放其占用的資源。. [( R$ q0 h% Y+ D( a9 H

    6 K6 u8 R  _- f( C. y5 o+ H4、可中斷睡眠態(tài)(Interruptible Sleep)
    " @2 o1 x* ?- H" [1 L) w可中斷睡眠態(tài)是進程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。( n2 k8 v/ \! E
    ; t: j1 g3 h" F: A  I8 ^
    此時進程處于睡眠狀態(tài),可以通過信號喚醒。
    & O+ ?- B( D9 M+ X+ m0 V; b
    5 F' L  V6 J" O; J& W) B4 n/ P2 k轉換關系:
    # \% Z3 C* H, [6 I6 j4 P: e
  • 從運行態(tài)進入可中斷睡眠態(tài):進程調用某些阻塞型系統(tǒng)調用(如 read() 等)等待某種外部事件時進入此狀態(tài)。
  • 從可中斷睡眠態(tài)進入就緒態(tài):當外部事件(如 I/O 完成或信號觸發(fā))發(fā)生時,進程被喚醒,進入就緒態(tài)。" P2 m$ D$ `$ M6 @  g

    ! u/ o, O# y# l; _. u5 a* ~5、不可中斷睡眠態(tài)(Uninterruptible Sleep); S! p9 ?' u5 x, e8 n5 M
    不可中斷睡眠態(tài)是進程等待某種無法通過信號喚醒的資源。
    $ G1 J" S" R! y
    + T& o+ T; j! ^- n$ u" r例如,等待硬件操作完成時,進程會進入此狀態(tài)。此時進程不會響應任何信號,直到所等待的事件發(fā)生。
    % l% G- E) _8 {" ^: d
      i$ l' i; w7 a3 s7 @8 \  R轉換關系:$ h: Z9 l. R7 y- S% R
  • 從運行態(tài)進入不可中斷睡眠態(tài):進程等待特定資源(如硬件 I/O)時進入此狀態(tài)。
  • 從不可中斷睡眠態(tài)進入就緒態(tài):- r  d) @: e) H* ^
    當?shù)却馁Y源可用時,進程會從不可中斷睡眠態(tài)醒來,重新進入就緒態(tài)。' I. p# D# i' w8 O; F

    4 D) ?6 n, I* N! a6、暫停態(tài)(Stopped)- B' `. q0 J2 A6 E( B7 [# h0 c9 j
    暫停態(tài)是進程被暫停運行的狀態(tài),通常由接收到 SIGSTOP 信號導致。
    4 g, T) e# ?. p3 I
    , r7 H8 m& R; f8 M5 K* A* P進程停止運行但沒有終止,所有的上下文信息都會被保留。
    ' e- f* V! w9 x. R# A1 z9 {* O' [1 O  Y, i; C3 w
    轉換關系:( T3 ], r: `/ ?" I( M" l1 A/ U+ l
  • 從運行態(tài)或就緒態(tài)進入暫停態(tài):進程接收到 SIGSTOP 信號后會進入暫停態(tài),暫停其執(zhí)行。
  • 從暫停態(tài)回到就緒態(tài):當進程接收到 SIGCONT 信號時,進程恢復執(zhí)行并進入就緒態(tài),等待 CPU 調度。
    , J; D5 z0 ~+ m, j
    # t3 H. V6 y/ }- C5 l0 \. i! R
    Linux 進程的狀態(tài)變化主要受 CPU 調度、系統(tǒng)調用、信號機制以及資源可用性等因素的影響。4 o. ~: b! t9 M2 l9 P/ ?% I1 j

    3 j4 n1 n5 H9 [3 e掌握進程狀態(tài)的轉換不僅有助于理解 Linux 的調度機制,也能有效幫助調試與優(yōu)化系統(tǒng)中的進程行為。3 @) o  D! Q  P; D3 @# Z
    ! j) D  i' u  m- L: w! G

    2 }  `0 N) e6 Y/ y  q  j( [2 ?. ~
    : [, Q) Y' L0 q- @. Z點擊閱讀原文,更精彩~
  • 回復

    使用道具 舉報

    發(fā)表回復

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

    本版積分規(guī)則


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