跳转至

进程的状态与转换

Linux

进程的状态

直接从man ps开始下手, 这里给出了9个状态, 和6个额外的字符:

image-20230921112311831

其中的WX状态, 在文档中明确说明了不可用或永远都不应该出现; 而其中的I状态只属于0号idle进程, 是系统所创建的第一个进程, 是其他所有进程的祖先进程; Tt状态都属于stopped, 因此归属于一类. 因此最后总结下来, 用户态中, 可见的进程的状态有5种:

  1. R: Running or runnable, 使用CPU资源执行其代码与逻辑
  2. D: Uninterruptible sleep, 等待CPU资源, 任何信号无效
  3. S: Interruptible sleep, 等待CPU资源, 信号有效
  4. T: Stopped, 等待SIGTSTP信号以继续执行, 一般用于调试
  5. Z: Zombie, 执行已结束, 但未被其父进程回收的进程, 处于这个状态

除了进程的五种状态, man ps中还列出了6中额外的字符, 用来显示一些额外的信息:

  1. <: high-priority
  2. N: low-priority
  3. L: has pages locked into memory
  4. s: is a session leader
  5. l: is multi-thread
  6. +: is in the foreground process group

接下来, 再简单看看ps a命令中所列出的进程: image-20230921113900910

可以很显然的看到, 多数的进程都处于S的状态, 仅有60966097号进程处于R状态(运行命令ps a | vim -); 还可以看到有5个进程处于前台, 但不是所有的前台应用都是一直处于R状态: 131, 38323840都是处于S状态(tmux分屏, 另外一半窗口正在查看ps指令手册)

状态的转换

image-20230921160426406

  1. 从辅存中, 将程序复制到主存中, 同时进程调度器将其设置为等待状态
  2. 调度器加载该进程到处理器上, 并且将状态设置为"运行"(此时, 前一个运行的进程将变为等待状态)
  3. 如果运行中的进程需要资源, 则进入"阻塞"状态, 等待资源
  4. 获取资源后, 将回到等待状态, 重新等待处理器资源分配
  5. 当进程执行结束后, 或被操作系统终止时, 进程进入终止状态, 等待被操作系统清理(未被清理但已经结束的进程为僵尸进程)

Windows

进程的状态

  1. New: 被加载到内存中
  2. Ready: 等待获取CPU使用权以开始第一次运行
  3. Executing: 执行
  4. Waiting: 等待CPU资源以继续执行
  5. Terminated: 进程执行结束

状态的转换

image-20230921171216718

Open Euler

进程的状态

  1. 就绪: 进程位于运行队列中, 已经获得CPU外的所有资源, 等待OS选中以使用CPU
  2. 运行: 使用CPU资源进行代码执行
  3. 阻塞: 直到某个事件的发生, 才能重新进入就绪状态
  4. 终止: 进程执行结束, 等待回收

状态的转换

image-20230925234200061

![[openeuler进程状态转移]]

Reference

  1. manual page ps(1)
  2. Linux Process States | Baeldung on Linux
  3. 了解一下Linux进程的五种状态 - 知乎 (zhihu.com)
  4. Process (computing) - Wikipedia
  5. What are the process states in Windows and Linux? (tutorialspoint.com)
  6. openEuler 笔记:进程1:程序的加载运行、进程的描述( PCB、进程状态 ) - 掘金 (juejin.cn)