进程的状态与转换
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进程状态转移]]