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

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

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

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

[復(fù)制鏈接]

586

主題

586

帖子

3544

積分

四級會員

Rank: 4

積分
3544
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 前天 08:00 | 只看該作者 |只看大圖 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式

! n, B$ D6 F; i( {0 D5 V點(diǎn)擊上方藍(lán)色字體,關(guān)注我們' d/ X. e2 q, L; F  g

) L! b+ h! z. Z  d. o, |在 Linux 系統(tǒng)中,進(jìn)程狀態(tài)及其轉(zhuǎn)換關(guān)系是進(jìn)程調(diào)度和管理的核心。我們可以將這些狀態(tài)視作進(jìn)程在其生命周期中所處的不同階段。2 O, W" l6 X# W! g3 j$ n3 N8 k

: I$ K6 }9 D5 s
; n" l  Z! A1 f3 O2 V進(jìn)程各狀態(tài)之間的切換- k' c% ?. j: {- ~( D
, \2 e8 W+ R* Y: s5 [: h) W
1、就緒態(tài)(Ready)/ f% L. |1 c; h/ Q2 F/ r

2 `' p3 q. ?; C5 w) ]就緒態(tài)表示進(jìn)程已經(jīng)具備執(zhí)行的條件,所有資源都已準(zhǔn)備好,但由于 CPU 正在忙于執(zhí)行其他任務(wù),進(jìn)程暫時(shí)沒有獲得執(zhí)行權(quán)。
8 b% Y0 x) |# A
2 z9 _/ ^& ^" I- o) f就緒態(tài)是動態(tài)的,當(dāng) CPU 變得空閑時(shí),調(diào)度器會從就緒態(tài)鏈表中選擇一個(gè)進(jìn)程進(jìn)行執(zhí)行。
2 n* Z  c. L( H4 ~! X( K( D2 T
& s9 A" v8 v2 x6 B/ i/ o轉(zhuǎn)換關(guān)系:9 p& f9 o  T1 d4 h8 z/ S
  • 從創(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ìn)程搶占,進(jìn)程會回到就緒態(tài),等待下次調(diào)度。
    7 ]( f) O/ B/ n* {5 N$ H$ }
      ^0 a2 N/ o0 c9 x. U- F
    2、運(yùn)行態(tài)(Running)
    - h8 L  s" t! Y' D8 A+ s6 B運(yùn)行態(tài)表示進(jìn)程正在被 CPU 執(zhí)行。CPU 將按照調(diào)度算法分配給該進(jìn)程時(shí)間片,允許其在有限時(shí)間內(nèi)執(zhí)行。
    1 S2 U) P* y, T; e- w# f0 p7 c! d0 E' n
    轉(zhuǎn)換關(guān)系:' U; n/ e5 D( I- Z, V3 g) Y
  • 從就緒態(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):- V/ Y+ R2 B' r0 W" O& M4 |7 l
  • 如果進(jìn)程時(shí)間片耗盡,會返回到就緒態(tài)。
  • 如果進(jìn)程需要等待某種資源或事件,會進(jìn)入睡眠態(tài)(等待態(tài))。
  • 進(jìn)程也可以通過收到信號進(jìn)入暫停態(tài)。
    / L% \# Q+ T/ `) a# L' a

      ^2 C1 \: f* E- ~9 n7 ^3、僵尸態(tài)(Zombie)+ i5 @/ J4 r# M. ?
    僵尸態(tài)進(jìn)程(Zombie Process)是指進(jìn)程已完成執(zhí)行,但其父進(jìn)程尚未通過 wait() 或 waitpid() 系統(tǒng)調(diào)用獲取其退出狀態(tài)并清理資源。/ b  o1 C, Y8 |" W3 K; I: K

    ; f+ z$ z5 Y/ ^" Y& }% n, A因此,進(jìn)程仍然保留著一個(gè)條目以供父進(jìn)程讀取其退出狀態(tài)。% y; Q  {1 b/ ?/ ^* G! l2 \" m
    0 K  G% x) E1 L3 K9 x! S
    僵尸態(tài)進(jìn)程不會消耗任何 CPU 資源,但其進(jìn)程表項(xiàng)仍占用系統(tǒng)資源。2 e9 ], Z, _3 ~4 v1 y2 F
    + Z: P6 c/ S7 U  [5 {
    , q( D. O- ~9 f
    轉(zhuǎn)換關(guān)系:+ ^: a$ C9 v1 K6 c4 ^+ }
  • 從運(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)會刪除僵尸進(jìn)程條目,釋放其占用的資源。4 l/ q; I' c- _4 X

    1 G  t0 I& |" w  ?4、可中斷睡眠態(tài)(Interruptible Sleep)5 f& J( k/ ~: r9 A2 m, s% M
    可中斷睡眠態(tài)是進(jìn)程正在等待某一事件的發(fā)生,例如等待 I/O 操作完成。
    - W, |& U" X, c& o" Z# g: `. _; L2 i& v, Q  k6 J
    此時(shí)進(jìn)程處于睡眠狀態(tài),可以通過信號喚醒。
    ; u# _/ S4 @: q- B
    : ^8 I/ H4 x) Y5 N轉(zhuǎn)換關(guān)系:
    ( k( b+ i! V+ `9 S1 p
  • 從運(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 完成或信號觸發(fā))發(fā)生時(shí),進(jìn)程被喚醒,進(jìn)入就緒態(tài)。
    % p, G+ @  }! e1 J
    ( u7 [* |' K) S8 r" U
    5、不可中斷睡眠態(tài)(Uninterruptible Sleep)
    . o9 ?' M; y. K4 D- o2 E" k5 B$ A- F不可中斷睡眠態(tài)是進(jìn)程等待某種無法通過信號喚醒的資源。
    ! y* p4 q, `3 f1 n9 h! W; }/ s- e, K, R# a0 m# Z2 ^, _" @. y
    例如,等待硬件操作完成時(shí),進(jìn)程會進(jìn)入此狀態(tài)。此時(shí)進(jìn)程不會響應(yīng)任何信號,直到所等待的事件發(fā)生。* g, l, ^9 o$ b
    : Q( `1 U0 v& j* U
    轉(zhuǎn)換關(guān)系:
    5 b* c& W+ N. P5 H' \
  • 從運(yùn)行態(tài)進(jìn)入不可中斷睡眠態(tài):進(jìn)程等待特定資源(如硬件 I/O)時(shí)進(jìn)入此狀態(tài)。
  • 從不可中斷睡眠態(tài)進(jìn)入就緒態(tài):( |) P$ P3 r- X! h
    當(dāng)?shù)却馁Y源可用時(shí),進(jìn)程會從不可中斷睡眠態(tài)醒來,重新進(jìn)入就緒態(tài)。" t. L7 x; n! Y  U# i. l
    # Y9 [4 g9 A8 g" k
    6、暫停態(tài)(Stopped)5 |9 u$ k# |, A: Y  Z% c  Z* k
    暫停態(tài)是進(jìn)程被暫停運(yùn)行的狀態(tài),通常由接收到 SIGSTOP 信號導(dǎo)致。6 O3 W. r; q7 z, R

    % L# X3 ~, O1 a# H* a, u$ b+ W進(jìn)程停止運(yùn)行但沒有終止,所有的上下文信息都會被保留。
    ( T* v& G( \9 ]. G* o% O, q8 x4 ?* Q2 T- z; C
    轉(zhuǎn)換關(guān)系:
    4 G7 U0 e% z# `: H$ V, D) Y# k' p
  • 從運(yùn)行態(tài)或就緒態(tài)進(jìn)入暫停態(tài):進(jìn)程接收到 SIGSTOP 信號后會進(jìn)入暫停態(tài),暫停其執(zhí)行。
  • 從暫停態(tài)回到就緒態(tài):當(dāng)進(jìn)程接收到 SIGCONT 信號時(shí),進(jìn)程恢復(fù)執(zhí)行并進(jìn)入就緒態(tài),等待 CPU 調(diào)度。2 G* S* b) B- m1 l

    + _( x* b& F, `0 }( j9 sLinux 進(jìn)程的狀態(tài)變化主要受 CPU 調(diào)度、系統(tǒng)調(diào)用、信號機(jī)制以及資源可用性等因素的影響。  G/ U8 t2 g; d. t8 D( k) {/ u
    ) Q: }2 G, o, X8 B$ U
    掌握進(jìn)程狀態(tài)的轉(zhuǎn)換不僅有助于理解 Linux 的調(diào)度機(jī)制,也能有效幫助調(diào)試與優(yōu)化系統(tǒng)中的進(jìn)程行為。. g! e2 R' j! t( A

    - H6 q  a6 t5 U5 m9 l' H4 S# k( R4 g; F! Y7 e' l
    6 L( l3 _- j: V" V, y) d$ q/ x, @
    點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

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

    本版積分規(guī)則


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