一、进程状态

通常情况下,我们描述进程的状态主要有三种:

  • 就绪态:进程已经拥有了执行条件,但是没有获取到CPU,无法执行。
  • 运行态:进程已经占有了CPU,此时正在CPU上运行。
  • 阻塞态:进程在等待某项服务、信号或者外部操作等时候的状态。

三者之间的转化过程:

状态说明:

  1. 就绪 => 运行:进程被调度,获得运行时机。
  2. 运行 => 就绪:运行时间片到了,CPU让出给其他进程运行。
  3. 运行 => 阻塞:请求服务、信号、IO或是外部操作等场景。
  4. 阻塞 => 就绪:获得了输入条件,如收到信号以及读到磁盘数据等。

为什么阻塞态到就绪态和运行态之间不能相互转化

进程处于阻塞态被唤醒时,不能直接就抢占到CPU执行,而是要等待系统调度后才能继续运行,所以必须先放到就绪态中。而处于就绪态的进程,是没有运行的,状态是不会变化的,所以不能直接变成阻塞态。

在大多数的操作系统描述中,进程可能还存在新建和终止的状态,他们之间的转态变化为:

二、linux系统中的进程状态

linux系统中的进程可以分为以下几种状态:

  • 可运行态

    • 就绪态:等待被调度
    • 运行态:正在运行
  • 阻塞态

    • 浅阻塞:可中断,能被信号或时钟唤醒
    • 深阻塞:不可中断,不能被信号或时钟唤醒
  • 僵死态:进程执行中止,已经释放了大部分资源
  • 挂起态:进程被挂起,常出现在调试场景
最后修改:2020 年 03 月 09 日
喜欢就给我点赞吧