电子产业一站式赋能平台

PCB联盟网

搜索
查看: 174|回复: 0
收起左侧

Linux进程状态及转换关系

[复制链接]

833

主题

833

帖子

6410

积分

高级会员

Rank: 5Rank: 5

积分
6410
发表于 2024-11-23 08:00:00 | 显示全部楼层 |阅读模式

zdjpnwusi3u64012786252.gif

zdjpnwusi3u64012786252.gif
4 P+ u& t$ v" a3 i; S. f
点击上方蓝色字体,关注我们' h9 `1 k. ]5 ^. h
( t$ ?; {% A8 Y9 F! ^' r  I% @
在 Linux 系统中,进程状态及其转换关系是进程调度和管理的核心。我们可以将这些状态视作进程在其生命周期中所处的不同阶段。" v) o3 \0 o, j
4 D3 o3 y* B  Z: \, J

ykyaecwsze564012786352.png

ykyaecwsze564012786352.png
7 Y* N! T, K4 W8 Q% ]( X/ A
进程各状态之间的切换0 m$ T+ k" Z2 y
- d. r6 a& E) L) C& F
1、就绪态(Ready)" S1 G$ [2 ^: C6 l

( {1 f# q7 k, @$ P4 e1 V* t就绪态表示进程已经具备执行的条件,所有资源都已准备好,但由于 CPU 正在忙于执行其他任务,进程暂时没有获得执行权。* e: h8 B7 x/ T) U# i4 c

, u. t3 z1 D; Z/ |" S就绪态是动态的,当 CPU 变得空闲时,调度器会从就绪态链表中选择一个进程进行执行。) x8 s- G+ {# R5 H+ G

4 \* g4 @  r) p, u9 E' d5 k: R转换关系:6 h2 _4 e5 F- K4 _6 d9 a
  • 从创建态进入就绪态:进程在创建时进入就绪态,等待被调度。
  • 从运行态回到就绪态:当进程的时间片耗尽或 CPU 被其他更高优先级的进程抢占,进程会回到就绪态,等待下次调度。4 Z( _7 E7 q8 A- [
    4 m& J4 m# Q2 z9 n  u' G7 U
    2、运行态(Running)* u, S8 P6 q  f' G
    运行态表示进程正在被 CPU 执行。CPU 将按照调度算法分配给该进程时间片,允许其在有限时间内执行。1 _  ~( o# G/ v7 P) V

    ( f* _8 |+ i/ B* d! u转换关系:5 c/ Y2 g  m0 `8 Y+ Q& A5 Y
  • 从就绪态进入运行态:当调度器选中某个进程并为其分配 CPU 时,进程进入运行态。
  • 从运行态转换到其他状态:
    ! d# E2 G  L6 z! N4 }2 k* V
  • 如果进程时间片耗尽,会返回到就绪态。
  • 如果进程需要等待某种资源或事件,会进入睡眠态(等待态)。
  • 进程也可以通过收到信号进入暂停态。$ P4 @! M1 w$ z  @. S& H
    9 C; z! }* n5 p
    3、僵尸态(Zombie)
    + T# ^2 K( N- G( C, S5 o' R$ n) M/ M僵尸态进程(Zombie Process)是指进程已完成执行,但其父进程尚未通过 wait() 或 waitpid() 系统调用获取其退出状态并清理资源。
      K7 B4 V2 y; w  K+ K' f; P3 t. z3 Q" v, o+ R+ I; c2 D
    因此,进程仍然保留着一个条目以供父进程读取其退出状态。9 a8 U( V; H( h, H, a. k
    $ ?) t) Z" E" H) d1 d0 X4 m
    僵尸态进程不会消耗任何 CPU 资源,但其进程表项仍占用系统资源。( h8 K  X, M4 o6 c/ d2 p

    7 X1 K4 t# r* h- t9 P
    $ F2 ^4 h5 M, C, j
    转换关系:! `, u: m) Y4 g2 K# M# W7 |
  • 从运行态进入僵尸态:当进程执行完毕并调用 exit() 结束运行后,进入僵尸态,等待父进程回收其资源。
  • 从僵尸态到消失:一旦父进程读取子进程的退出状态,系统会删除僵尸进程条目,释放其占用的资源。" M, Z, o; ~0 A6 y

    % H9 ~6 d+ U$ W$ f4、可中断睡眠态(Interruptible Sleep)
    / a6 o  t8 k' r& V可中断睡眠态是进程正在等待某一事件的发生,例如等待 I/O 操作完成。
    3 L& H0 x# `0 D8 G; d: _( l8 o* S
    ) v& s, X1 @" x# `$ `此时进程处于睡眠状态,可以通过信号唤醒。9 j, b  q; G0 W+ [! y! N
    9 \$ J( Z  S- W! `- r- S3 ]
    转换关系:
    / L3 ^+ a! W$ y0 ]1 G! V
  • 从运行态进入可中断睡眠态:进程调用某些阻塞型系统调用(如 read() 等)等待某种外部事件时进入此状态。
  • 从可中断睡眠态进入就绪态:当外部事件(如 I/O 完成或信号触发)发生时,进程被唤醒,进入就绪态。
    6 y& L, a* q4 h5 n4 _

    * M% N2 u* z0 `7 I( U6 T* F8 S5、不可中断睡眠态(Uninterruptible Sleep)% ~2 J. v+ q  D# ]9 v( H. ^
    不可中断睡眠态是进程等待某种无法通过信号唤醒的资源。
    ! p6 m! R% n5 V& S8 \5 y+ c8 {+ y( G$ v* I6 y
    例如,等待硬件操作完成时,进程会进入此状态。此时进程不会响应任何信号,直到所等待的事件发生。2 `' R2 h+ D3 f

    8 @7 o- {$ }, S4 A' K) J转换关系:' B; V+ v, L( c
  • 从运行态进入不可中断睡眠态:进程等待特定资源(如硬件 I/O)时进入此状态。
  • 从不可中断睡眠态进入就绪态:
    * I' K! N0 ?. k当等待的资源可用时,进程会从不可中断睡眠态醒来,重新进入就绪态。; _! t8 Z- ^/ v. l" s9 C7 j

    % F6 _- C  o7 ~8 E- G. R6、暂停态(Stopped)- b# N- p( f) A8 {, A
    暂停态是进程被暂停运行的状态,通常由接收到 SIGSTOP 信号导致。
    - r9 n+ C9 t2 p1 y8 N& Z) \9 L' K7 F0 \3 ^/ b
    进程停止运行但没有终止,所有的上下文信息都会被保留。
    : t2 f9 ^5 r4 l! x* V* S3 w+ ^3 L% V8 a# @2 ^
    转换关系:+ T. P9 m% `+ B" H, d
  • 从运行态或就绪态进入暂停态:进程接收到 SIGSTOP 信号后会进入暂停态,暂停其执行。
  • 从暂停态回到就绪态:当进程接收到 SIGCONT 信号时,进程恢复执行并进入就绪态,等待 CPU 调度。# i9 e8 {& X/ y1 m

    ! A* b# q0 M& v; `; _Linux 进程的状态变化主要受 CPU 调度、系统调用、信号机制以及资源可用性等因素的影响。
    / ?3 E; o' }' m( M$ F. I, a8 o. r* ?2 Z
    掌握进程状态的转换不仅有助于理解 Linux 的调度机制,也能有效帮助调试与优化系统中的进程行为。8 W% C1 C! i, ?6 n# A; v

    zp0lb15juaa64012786452.jpg

    zp0lb15juaa64012786452.jpg
    / t# [1 X  P* v% r

    5 Y  T! p% _2 {: \) B: L

    yogi2f0otvd64012786552.gif

    yogi2f0otvd64012786552.gif

    / o# y4 w) [8 R, Y' C. F# j! ~点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表