0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

进程有哪些状态?细说进程的状态

学益得智能硬件 来源:学益得智能硬件 2023-07-25 17:06 次阅读

进程有哪些状态?这个问题在面试的时候出现的概率也比较高。

如果你学过操作系统这门课,那一定看过这张图:

30bdeef2-2aca-11ee-a368-dac502259ad0.png  

运行、就绪、阻塞指的就是进程的三种状态。 要想搞懂这三种状态,还得从操作系统的进程调度说起。

假设CPU是单核的,单核的CPU一次只能处理一件事情,但是在操作系统上往往有多个任务需要执行。

于是操作系统就会轮流让任务占用CPU,比如先让第一个进程占用CPU,运行个5ms,然后把它放一边去,再让第二个进程占用CPU,也运行个几毫秒。

因为轮转的速度特别快,所以在正常人看来,这些进程好像是在同时执行。

有了这个背景,再来看进程的状态就会比较容易。

所谓运行,就是进程占用CPU正在执行的状态。

所谓就绪,就是万事俱备,等待被操作系统调度的状态。

最后还有一种阻塞,比如程序在运行的时候,遇到了类似scanf这样阻塞的函数,需要等待用户从键盘输入,这个时候即使让他占用CPU运行,也是浪费时间,干脆就让它进入阻塞的状态,直到条件满足,也就是有用户输入了数据,再让它回到就绪的状态,等待被操作系统调用。

再来看下Linux下进程的状态。

31731d54-2aca-11ee-a368-dac502259ad0.png  

这个分的就更细了,结合代码来说明。

int main()
{
    while (1);
}
先来个死循环,运行起来,此时它是R的状态,表示正在运行,加号表示前台运行。

31ede228-2aca-11ee-a368-dac502259ad0.png  

代码稍微修改一下,加上printf输出。
int main()
{
    while (1)
    {
printf("
");
    }
    
    return 0;
}
此时变成了S状态,就是睡眠状态。

320b0fc4-2aca-11ee-a368-dac502259ad0.png  

那么问题就来了,程序正在运行,为什么就是睡眠状态?

因为printf需要访问外设,比CPU速度慢很多,程序大部分时间都在等待输出,并不是在等待被调度,所以并不属于运行状态。

还有一种睡眠状态叫D,Disk sleep,也叫深度睡眠。

32243b34-2aca-11ee-a368-dac502259ad0.png  

服务器压力过大时,操作系统会杀掉一些进程,如果是D状态,操作系统无法干预,比如dd这个命令,进程就是D状态。

还有一种T状态也比较常见,一个正在运行的程序,如果按下ctrl z,就会进入暂停状态。

3240162e-2aca-11ee-a368-dac502259ad0.png   32627386-2aca-11ee-a368-dac502259ad0.png  




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26911
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27165
  • LINUX内核
    +关注

    关注

    1

    文章

    311

    浏览量

    21389
  • printf函数
    +关注

    关注

    0

    文章

    30

    浏览量

    5826

原文标题:细说进程的状态

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux系统下进程的几种状态介绍

    文章对 Linux 系统下进程的几种状态进行介绍,并对系统出现大量僵尸进程和不可中断进程的场景进行分析,使用常用的几种工具进行问题分析定位。
    发表于 11-24 16:15 9960次阅读
    Linux系统下<b class='flag-5'>进程</b>的几种<b class='flag-5'>状态</b>介绍

    【Linux学习杂谈】之进程状态

    本帖最后由 michael_llh 于 2016-9-27 00:37 编辑 进程的5种状态:1.就绪态 就绪态就是说进程已经准备好了去运行了,只要CPU有空闲的时间就可以运行2.运行态
    发表于 09-27 00:36

    孤儿进程和僵尸进程

    前段时间,由于研究经典面试题,把孤儿进程和僵尸进程也总结了一下。我们有这样一个问题:孤儿进程和僵尸进程,怎么产生的?什么危害?怎么去预防?
    发表于 11-29 14:08

    Linux下的进程结构

    、所接收的信号信息等。 下面详细讲解task_struct结构中最为重要的两个域:state(进程状态)和pid(进程标识符)。 1)进程状态
    发表于 05-27 09:24

    linux系统进程存在状态及管理

    linux系统进程存在状态及管理详解
    发表于 05-21 06:28

    进程类型及三种状态

    进程类型进程的三种状态
    发表于 04-02 07:06

    进程与程序何不同

    着文件、静态和可以复制。进程是暂时的,程序使长久的:进程是个状态变化的过程,程序可长久保存。进程与程序组成不同:进程的组成包括程序、数据和
    发表于 11-08 08:27

    进程是什么?进程与程序的区别在哪

    进程是什么?进程与程序的区别在哪?进程状态哪几种?
    发表于 12-23 06:27

    进程几种状态

    文章目录操作系统进程和线程什么是进程?什么是线程?进程和线程什么区别?何时使用多进程,何时使用多线程?
    发表于 12-24 07:16

    Linux进程管理

    Linux进程管理 本章主要介绍进程的概念、状态、构成以及Linux进程的相关知识。 掌握进程的概念 掌握
    发表于 04-28 14:57 0次下载

    Linux 进程状态浅析

    一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linux内核对进程的这种管理分两个方面:进程状态管理,
    发表于 04-02 14:40 225次阅读

    进程的三种基本状态进程控制块(PCB)

    一个进程在运行期间,不断地从一种状态转换到另一种状态,它可以多次处于就绪状态和执行状态,也可以多次处于阻塞
    的头像 发表于 01-15 10:36 1.1w次阅读
    <b class='flag-5'>进程</b>的三种基本<b class='flag-5'>状态</b>及<b class='flag-5'>进程</b>控制块(PCB)

    经典双进程状态机的FPGA实现(含testbeach)

    经典双进程状态机的FPGA实现(含testbeach)(肇庆理士电源技术有限公司图片)-该文档为经典双进程状态机的FPGA实现(含testbeach)总结文档,是一份很不错的参考资料,
    发表于 08-31 13:26 3次下载
    经典双<b class='flag-5'>进程</b><b class='flag-5'>状态</b>机的FPGA实现(含testbeach)

    Linux如何以暂停状态启动新进程

    “请教一个Bash的问题:有没有什么办法让一个新开的进程,一开始就处于暂停状态,直到我输入fg?”
    的头像 发表于 04-15 12:25 1884次阅读

    进程进入等待状态有哪几种方式

    进程进入等待状态的方式有多种,下面将详细介绍。 一、阻塞等待状态 阻塞等待状态是指进程由于某些原因无法继续执行,需要等待特定事件的发生。以下
    的头像 发表于 11-17 11:19 828次阅读