全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-07-25 17:06

人气:

作者:admin

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

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

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

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  




审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信