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

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

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

Linux進(jìn)程狀態(tài)及轉(zhuǎn)換關(guān)系

[復(fù)制鏈接]

660

主題

660

帖子

4567

積分

四級(jí)會(huì)員

Rank: 4

積分
4567
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-11-23 08:00:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
2 |2 s' E& {7 E5 |# |
點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
: n' G; i7 ^  N& z( [
. k4 v/ O; _9 Z# q1 z9 c在 Linux 系統(tǒng)中,進(jìn)程狀態(tài)及其轉(zhuǎn)換關(guān)系是進(jìn)程調(diào)度和管理的核心。我們可以將這些狀態(tài)視作進(jìn)程在其生命周期中所處的不同階段。- G- C2 [9 O( C

* r; @2 e) S$ f 3 Q( @5 P( Z! L* j' L, q
進(jìn)程各狀態(tài)之間的切換
: ?6 [  t2 \1 g6 a
" B% T3 q: r: t1、就緒態(tài)(Ready)
6 Y% Q6 S/ ], W8 e  w! A: Y. @# A' p+ N/ L
就緒態(tài)表示進(jìn)程已經(jīng)具備執(zhí)行的條件,所有資源都已準(zhǔn)備好,但由于 CPU 正在忙于執(zhí)行其他任務(wù),進(jìn)程暫時(shí)沒有獲得執(zhí)行權(quán)。
; A) V) Y# Z' U8 L% v! a( ]' q; ]9 S* q7 L) K3 J: Y
就緒態(tài)是動(dòng)態(tài)的,當(dāng) CPU 變得空閑時(shí),調(diào)度器會(huì)從就緒態(tài)鏈表中選擇一個(gè)進(jìn)程進(jìn)行執(zhí)行。( @& e% d" }) s* B# M: v* d

& P, Y/ ^+ \9 L轉(zhuǎn)換關(guān)系:
. `: T/ n; A# Z2 f: U8 A
  • 從創(chuàng)建態(tài)進(jìn)入就緒態(tài):進(jìn)程在創(chuàng)建時(shí)進(jìn)入就緒態(tài),等待被調(diào)度。
  • 從運(yùn)行態(tài)回到就緒態(tài):當(dāng)進(jìn)程的時(shí)間片耗盡或 CPU 被其他更高優(yōu)先級(jí)的進(jìn)程搶占,進(jìn)程會(huì)回到就緒態(tài),等待下次調(diào)度。
    : a# d- f, e) s2 E" a2 M
    - |1 ^0 |) B; [/ s1 _0 g9 N% x
    2、運(yùn)行態(tài)(Running)3 Q- c) n8 k6 O+ k9 T4 M) E; H0 g
    運(yùn)行態(tài)表示進(jìn)程正在被 CPU 執(zhí)行。CPU 將按照調(diào)度算法分配給該進(jìn)程時(shí)間片,允許其在有限時(shí)間內(nèi)執(zhí)行。
    ! j+ E* V& a, p  S9 d! C5 w5 E# T3 l
    轉(zhuǎn)換關(guān)系:
    7 B; r" O! Z  H
  • 從就緒態(tài)進(jìn)入運(yùn)行態(tài):當(dāng)調(diào)度器選中某個(gè)進(jìn)程并為其分配 CPU 時(shí),進(jìn)程進(jìn)入運(yùn)行態(tài)。
  • 從運(yùn)行態(tài)轉(zhuǎn)換到其他狀態(tài):/ P5 d9 C& @9 c. @, T/ F
  • 如果進(jìn)程時(shí)間片耗盡,會(huì)返回到就緒態(tài)。
  • 如果進(jìn)程需要等待某種資源或事件,會(huì)進(jìn)入睡眠態(tài)(等待態(tài))。
  • 進(jìn)程也可以通過收到信號(hào)進(jìn)入暫停態(tài)。
    # {. w+ \5 [3 A' U  x9 p2 t

    - M, t6 w) a1 \+ D, J) c; l3、僵尸態(tài)(Zombie)
    9 C2 ?- F6 A* x8 b僵尸態(tài)進(jìn)程(Zombie Process)是指進(jìn)程已完成執(zhí)行,但其父進(jìn)程尚未通過 wait() 或 waitpid() 系統(tǒng)調(diào)用獲取其退出狀態(tài)并清理資源。
    $ T# [: _) i( n! z/ I. U  u8 l. W
    因此,進(jìn)程仍然保留著一個(gè)條目以供父進(jìn)程讀取其退出狀態(tài)。1 x4 W/ [0 e9 v$ E! K, p

    0 x) ?5 B/ K1 M2 E) \僵尸態(tài)進(jìn)程不會(huì)消耗任何 CPU 資源,但其進(jìn)程表項(xiàng)仍占用系統(tǒng)資源。$ O5 s4 x- ^, K$ d& P8 |+ r

    # X. s/ A+ v7 V( d. \- f

    , ]& i- V3 N; ]" ^+ s轉(zhuǎn)換關(guān)系:
    . \, s' B3 Z  s% R
  • 從運(yùn)行態(tài)進(jìn)入僵尸態(tài):當(dāng)進(jìn)程執(zhí)行完畢并調(diào)用 exit() 結(jié)束運(yùn)行后,進(jìn)入僵尸態(tài),等待父進(jìn)程回收其資源。
  • 從僵尸態(tài)到消失:一旦父進(jìn)程讀取子進(jìn)程的退出狀態(tài),系統(tǒng)會(huì)刪除僵尸進(jìn)程條目,釋放其占用的資源。
    - _/ D: l2 p5 e
    ' K# f* H5 d3 X3 z. q( n; R" L
    4、可中斷睡眠態(tài)(Interruptible Sleep)
    ' J5 y0 b- Z9 C; M$ s& r$ _可中斷睡眠態(tài)是進(jìn)程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。7 Y8 n2 m/ k( Q4 e6 r

    7 x, P- i5 ]$ Q9 i- V此時(shí)進(jìn)程處于睡眠狀態(tài),可以通過信號(hào)喚醒。
    9 O* _( z3 s, e) C3 K  i/ ?& r" B3 m) @+ P) e5 M  w) o
    轉(zhuǎn)換關(guān)系:
    $ S  e+ Q9 S# i6 R( L& b7 ]. z
  • 從運(yùn)行態(tài)進(jìn)入可中斷睡眠態(tài):進(jìn)程調(diào)用某些阻塞型系統(tǒng)調(diào)用(如 read() 等)等待某種外部事件時(shí)進(jìn)入此狀態(tài)。
  • 從可中斷睡眠態(tài)進(jìn)入就緒態(tài):當(dāng)外部事件(如 I/O 完成或信號(hào)觸發(fā))發(fā)生時(shí),進(jìn)程被喚醒,進(jìn)入就緒態(tài)。6 L: p8 {: V8 \& j4 s3 i

    ' |& x, G6 k% p5 ?/ ~# w' u5、不可中斷睡眠態(tài)(Uninterruptible Sleep)- t- U: U1 p' t0 w7 ~+ K
    不可中斷睡眠態(tài)是進(jìn)程等待某種無(wú)法通過信號(hào)喚醒的資源。3 j& _2 w; g7 r0 U

    ! ~# r3 O" ~( S+ o6 T: [9 }3 v6 ?例如,等待硬件操作完成時(shí),進(jìn)程會(huì)進(jìn)入此狀態(tài)。此時(shí)進(jìn)程不會(huì)響應(yīng)任何信號(hào),直到所等待的事件發(fā)生。
    ) K4 L: i. K. @2 q
    ; B8 ?& s2 d* ]轉(zhuǎn)換關(guān)系:
    $ J8 L4 \2 q- a0 ^' [# O
  • 從運(yùn)行態(tài)進(jìn)入不可中斷睡眠態(tài):進(jìn)程等待特定資源(如硬件 I/O)時(shí)進(jìn)入此狀態(tài)。
  • 從不可中斷睡眠態(tài)進(jìn)入就緒態(tài):
    " `9 b/ M# f( o7 u7 W' W當(dāng)?shù)却馁Y源可用時(shí),進(jìn)程會(huì)從不可中斷睡眠態(tài)醒來(lái),重新進(jìn)入就緒態(tài)。
    + ^/ ]7 m' i: W* ?, O. c

    ( L! v; q. n" G- B- z' H. m, n6、暫停態(tài)(Stopped)& {- e- {: P. x1 B3 y, q9 b3 d) r
    暫停態(tài)是進(jìn)程被暫停運(yùn)行的狀態(tài),通常由接收到 SIGSTOP 信號(hào)導(dǎo)致。
    . Y) z/ r% R$ p$ i  g, K8 K  x4 f4 _$ b9 F" s
    進(jìn)程停止運(yùn)行但沒有終止,所有的上下文信息都會(huì)被保留。- c  x: E) M. L4 s6 L( P

    % K9 d1 \4 {. f) I, e6 Y; z轉(zhuǎn)換關(guān)系:' D3 R( D5 _- L5 ~: X. A
  • 從運(yùn)行態(tài)或就緒態(tài)進(jìn)入暫停態(tài):進(jìn)程接收到 SIGSTOP 信號(hào)后會(huì)進(jìn)入暫停態(tài),暫停其執(zhí)行。
  • 從暫停態(tài)回到就緒態(tài):當(dāng)進(jìn)程接收到 SIGCONT 信號(hào)時(shí),進(jìn)程恢復(fù)執(zhí)行并進(jìn)入就緒態(tài),等待 CPU 調(diào)度。- V8 e, v0 l0 X) \' \

      V& a2 z( B# W3 ELinux 進(jìn)程的狀態(tài)變化主要受 CPU 調(diào)度、系統(tǒng)調(diào)用、信號(hào)機(jī)制以及資源可用性等因素的影響。
    ! ^  C, e- d4 Q9 }% l: d9 O. t/ }# E( T3 V' E" ~
    掌握進(jìn)程狀態(tài)的轉(zhuǎn)換不僅有助于理解 Linux 的調(diào)度機(jī)制,也能有效幫助調(diào)試與優(yōu)化系統(tǒng)中的進(jìn)程行為。
      K. O+ G. m. ^+ @" R$ I- E0 X ! c' n; L  E* Q  y% s$ c, k7 m- P/ y

    # ~( u5 l7 E$ C
    - e2 c& r. `  U& j點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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