进程的状态与转换
Linux
进程的状态
直接从man ps
开始下手, 这里给出了9个状态, 和6个额外的字符:
其中的W
和X
状态, 在文档中明确说明了不可用或永远都不应该出现; 而其中的I
状态只属于0号idle进程, 是系统所创建的第一个进程, 是其他所有进程的祖先进程; T
与t
状态都属于stopped
, 因此归属于一类. 因此最后总结下来, 用户态中, 可见的进程的状态有5种:
R
: Running or runnable, 使用CPU资源执行其代码与逻辑D
: Uninterruptible sleep, 等待CPU资源, 任何信号无效S
: Interruptible sleep, 等待CPU资源, 信号有效T
: Stopped, 等待SIGTSTP信号以继续执行, 一般用于调试Z
: Zombie, 执行已结束, 但未被其父进程回收的进程, 处于这个状态
除了进程的五种状态, man ps
中还列出了6中额外的字符, 用来显示一些额外的信息:
<
: high-priorityN
: low-priorityL
: has pages locked into memorys
: is a session leaderl
: is multi-thread+
: is in the foreground process group
接下来, 再简单看看ps a
命令中所列出的进程:
可以很显然的看到, 多数的进程都处于S
的状态, 仅有6096
和6097
号进程处于R
状态(运行命令ps a | vim -
); 还可以看到有5个进程处于前台, 但不是所有的前台应用都是一直处于R
状态: 131
, 3832
和3840
都是处于S
状态(tmux分屏, 另外一半窗口正在查看ps
指令手册)
状态的转换
- 从辅存中, 将程序复制到主存中, 同时进程调度器将其设置为等待状态
- 调度器加载该进程到处理器上, 并且将状态设置为"运行"(此时, 前一个运行的进程将变为等待状态)
- 如果运行中的进程需要资源, 则进入"阻塞"状态, 等待资源
- 获取资源后, 将回到等待状态, 重新等待处理器资源分配
- 当进程执行结束后, 或被操作系统终止时, 进程进入终止状态, 等待被操作系统清理(未被清理但已经结束的进程为僵尸进程)
Windows
进程的状态
New
: 被加载到内存中Ready
: 等待获取CPU使用权以开始第一次运行Executing
: 执行Waiting
: 等待CPU资源以继续执行Terminated
: 进程执行结束
状态的转换
Open Euler
进程的状态
- 就绪: 进程位于运行队列中, 已经获得CPU外的所有资源, 等待OS选中以使用CPU
- 运行: 使用CPU资源进行代码执行
- 阻塞: 直到某个事件的发生, 才能重新进入就绪状态
- 终止: 进程执行结束, 等待回收
状态的转换
![[openeuler进程状态转移]]