面试题-操作系统中进程的状态有哪些

进程的状态

在操作系统中,进程是一个执行中程序的实例。操作系统为了管理多个进程,通常会为每个进程维护一个状态。一个进程在其生命周期中可能会有以下几种基本状态:

  1. 新建状态 (New)
    当进程刚刚创建时,它处于新建状态。在这个阶段,操作系统对进程进行初始化,为其分配所需的资源和内存空间。

  2. 就绪状态 (Ready)
    进程已经准备好开始执行,但由于正在使用CPU的其他进程,它暂时不能执行。处于就绪状态的进程会被放入就绪队列,等待分配CPU时间。

  3. 运行状态 (Running)
    进程获得CPU时间,开始执行其指令。一个时间片结束或者由于其它原因需要让出CPU时,进程会离开运行状态。

  4. 等待/阻塞状态 (Waiting/Blocked)
    当进程等待某些事件发生(例如,等待I/O操作完成、等待信号量、等待获取资源)时,它会进入等待或阻塞状态。在该状态下,进程不会使用CPU资源,即使CPU空闲也不会执行这个进程。一旦所等待的事件发生,进程会重新进入就绪状态。

  5. 终止状态 (Terminated or Exit)
    进程完成执行或者被操作系统强制终止。在这个状态下,操作系统释放进程所占用的所有资源,包括内存和任何打开的文件。

在一些操作系统中,还可以有一些其他的进程状态,例如挂起状态(Suspended),这个状态表示进程被移到外部存储,暂时从主存储移除,不参与调度,直到再次被唤醒恢复到就绪状态。

以上这些状态构成了进程的状态模型。进程状态的转换一般是由操作系统的调度程序(scheduler)和进程管理器(process manager)控制。根据操作系统和具体的实现,可能会有额外的状态或不同的状态命名。

ps工具中怎么表示进程状态

在Unix-like的操作系统中,ps 工具(即“process status”)是一个常用的命令行工具,可以用来显示当前系统中的进程状态。ps命令输出的信息中,每个进程都有一个表示其当前状态的代码。

ps命令输出中常见的进程状态码及其含义如下:

  • D - 不可中断睡眠状态 (Uninterruptible Sleep): 进程正在等待某种操作的完成,通常是I/O操作。在此状态下的进程不能被信号打断。

  • R - 运行状态 (Running): 进程正在运行或在运行队列中等待。

  • S - 可中断睡眠状态 (Interruptible Sleep): 进程正在等待事件或接收信号。

  • T - 停止状态 (Stopped): 进程已经被停止,通常是因为接收到了控制信号(CTRL+C)或者是正在被调试。

  • t - 停止后被追踪或被追踪 (Traced or Stopped after being traced): 表明进程被ptrace调试器停止或正在被它跟踪。

  • Z - 僵尸状态 (Zombie): 进程已经终止,但其父进程还没有通过调用wait()来读取子进程的退出状态。

  • X - 死进程 (Dead): 在某些系统中,这标识一个尚未回收的死亡进程。

  • I - 闲置 (Idle): 在多线程书签,表示闲置的内核线程。

  • W - 进入内存交换(swapped out)状态的进程(从内存交换到磁盘上)

另外,有些状态可能同时带有附加的标记,以指示更特殊的状态信息,如:

  • < 表示高优先级(不可被nice命令调整的正数优先级)

  • N 表示低优先级(可被nice命令调整的负数优先级)

  • L 表示有页面锁定在内存中 (即实时、或有I/O)

  • + 表示位于后台进程组

请注意,不同版本的Unix系统可能有些许差异,如ps的输出以及支持的状态码。对于特定系统,请参阅其man手册中ps部分的说明(可以使用命令man ps查看)。

你可能感兴趣的:(面试,c++,笔记,经验分享)