Linux进程状态及转换关系全解析

2026-10-19 10:05:43 14阅读

在 Linux 系统中,进程状态及其转换关系是进程调度和管理的核心。我们可以将这些状态视作进程在其生命周期中所处的不同阶段。

1、就绪态(Ready)

就绪态表示进程已具备执行条件、所有资源都已准备好,但 CPU 正忙于执行其他任务,进程暂时没有获得执行权。就绪态是动态的,当 CPU 空闲时,调度器会从就绪态链表中选择一个进程执行。

转换关系:进程创建后进入就绪态,等待被调度;当进程时间片耗尽或被更高优先级进程抢占,进程回到就绪态等待下次调度。

2、运行态(Running)

运行态表示进程正被 CPU 执行。CPU 按调度算法给该进程分配时间片,允许其在有限时间内执行。

转换关系:调度器选中某个进程并分配 CPU 时,进程进入运行态;时间片耗尽则返回就绪态;若需等待资源或事件则进入睡眠态(等待态);进程也可以通过收到信号进入暂停态。

3、僵尸态(Zombie)

僵尸态进程是指进程已完成执行,但其父进程尚未通过 wait() 或 waitpid() 系统调用获取其退出状态并清理资源。因此进程仍保留一个条目供父进程读取退出状态。僵尸进程不消耗 CPU 资源,但其进程表项仍占用系统资源。

转换关系:进程执行完毕并调用 exit() 结束后进入僵尸态,等待父进程回收;父进程读取子进程退出状态后,系统删除僵尸进程条目、释放资源。

4、可中断睡眠态(Interruptible Sleep)

可中断睡眠态指进程正在等待某一事件发生(如等待 I/O 操作完成)。此时进程处于睡眠状态,可以通过信号唤醒。

转换关系:进程调用阻塞型系统调用(如 read())等待外部事件时进入此状态;外部事件(如 I/O 完成或信号触发)发生时,进程被唤醒进入就绪态。

5、不可中断睡眠态(Uninterruptible Sleep)

不可中断睡眠态指进程等待某种无法通过信号唤醒的资源,例如等待硬件操作完成。此时进程不响应任何信号,直到所等待的事件发生。

转换关系:进程等待特定资源(如硬件 I/O)时进入此状态;当资源可用时,进程醒来重新进入就绪态。

6、暂停态(Stopped)

暂停态是进程被暂停运行的状态,通常由接收到 SIGSTOP 信号导致。进程停止运行但未终止,所有上下文信息都会被保留。

转换关系:进程接收到 SIGSTOP 信号后从运行态或就绪态进入暂停态;接收到 SIGCONT 信号时恢复执行并进入就绪态,等待 CPU 调度。

Linux 进程的状态变化主要受 CPU 调度、系统调用、信号机制以及资源可用性等因素影响。掌握进程状态的转换,不仅有助于理解 Linux 的调度机制,也能有效帮助调试与优化系统中的进程行为。


作者:不脱发的程序猿
链接:https://www.aiddithome.com/p/12a6188bfb3ec5.html
本作遵循 [CC BY 4.0 署名] 许可,版权归作者所有。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
3条评论
天快亮了
1楼 · 2天前

进程状态转换一理就清晰了,僵尸态那段解释得特别明白。

只看不说话
2楼 · 2天前

从就绪到运行再到睡眠的转换关系讲得很顺,适合入门 Linux。

参数党小马
3楼 · 2天前

对排查进程卡住的问题很有帮助,调试进程必备。