Linux 下的进程状态

文章目录

一、运行状态

R状态:进程已经准备好随时被调度了。

运行队列

每个 CPU 都会维护一个自己的运行队列(一个CPU,一个运行队列)。

运行状态和运行队列

二、睡眠状态

S状态

  • S状态(sleeping):可中断睡眠(浅度睡眠)状态。
  • 操作系统在资源紧缺时,可以直接杀死该状态的进程。
cpp 复制代码
int main()
{
	whilie(1)
	{
		printf("hello process");
	}
}
  1. printf 是从外设上取数据,循环打印时,不一定每次要打印时,外设都已经准备好了,因为 CPU 比外设速度快的多,所以CPU会等待外设。
  2. 我们在运行该程序时,发现进程状态是S ,表明大部分时间进程还是在等待的,而不是在运行(可以在某个瞬间看到它是R状态,但概率很低)。

而大部分进程都会与外设有关,会有等待的状态。

D状态

  • D状态(disk sleep):不可中断睡眠(深度睡眠)。
  • 操作系统不会杀D状态的进程。

D状态产生的原因


导致的情况:

数据丢掉啦!!!

那么是谁的错呢?

  1. 对于操作系统:
  • 我本身就有管理它们的能力,而且资源紧缺时有权利杀掉进程。
  • 如果紧缺时不杀这个进程,那系统整体就要挂了,那系统中的十几个进程就都要挂了,损失的数据就更多了,所以杀掉该进程是正确的选择。
  1. 对于进程:
    我是受害者,我被操作系统杀死了,跟我没关系。
  2. 对于磁盘:
    我就是一个跑腿的,让我干什么就干什么,跟我没关系。

所以为了避免这种情况,再增加一种状态:

三、暂停状态

T状态

T状态(stopped):暂停状态。

  • 手动暂停,继续进程

    查看 kill 信号:

    其中,18 :进程继续,19:进程暂停。

    可以使用 kill 信号进行进程的手动暂停和继续。

  • 自动暂停进程

    有些进程被禁止做某些操作,但如果进程硬要这样干,进程就会被暂停。

t 状态

  • t 状态(tracing stop):被追踪的暂停状态。
  • 当进程处于被追踪状态时,进程暂停,等一等追踪我的那个东西。

四、僵尸状态

Z状态(zombie):僵尸状态,进程已经执行完毕,但并未获得进程退出的相关信息时的状态。

为什么有僵尸状态


PCB 的释放:

  • 进程执行完毕后,代码和数据可以直接释放,但PCB要留下,直到里面的退出信息被父进程读取了,然后PCB才能释放。
  • 如果父进程不读取,那僵尸状态会一直存在,task_struct 对象也会一直存在,会占用内存,即内存泄漏。

一般父进程是不会自动读取子进程的结束信息的,但 bash 会自动读取,所以我们没有手动读取程序的结束信息也没有内存泄露。

孤儿进程

  • 父进程死亡的子进程,就称为孤儿进程。
  • 如果父进程先子进程挂掉,那子进程的 PCB 就无法释放了,为了避免这种情况,子进程会被另一个父亲领养(一般是被 1 号进程(操作系统)领养)。

本文到这里就结束了,如果对您有帮助的话,可以给个赞支持一下哦,如果有哪里有错误,欢迎指正。

相关推荐
青柚~6 分钟前
【Windows修改Docker Desktop(WSL2)内存分配大小】
运维·docker·容器
我是哈哈hh30 分钟前
Linux环境基础开发工具的使用_yum源_vim_Git控制器
linux·运维·c++·git·vim·1024程序员节
猫猫不是喵喵.32 分钟前
【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销
linux·运维·服务器
little redcap35 分钟前
xftp连接中不成功 + sudo vim 修改sshd_config不成功的解决方法
linux·编辑器·vim
三菱-Liu1 小时前
三菱MR-J4伺服绝对位置检测系统
运维·驱动开发·嵌入式硬件·硬件工程·制造·mr
这个菠萝好咸1 小时前
内核源码+vscode+bear+clang实现函数任意跳转,无缝跳转,无缝阅读,无缝开发
linux·c语言·驱动开发·后端·arm单片机
待磨的钝刨1 小时前
四期书生大模型实战营(【基础岛】- 第1关 | 书生·浦语大模型开源开放体系)
linux·服务器·git·python
太空眼睛2 小时前
【EFK】Linux集群部署Elasticsearch最新版本8.x
linux·elk·elasticsearch·efk·master·8.15.3·node.roles
Tranquil_ovo2 小时前
【Linux】【Vim】多文件编辑与分屏
linux·vim
江湖有缘2 小时前
Linux系统之time命令的基本使用
linux·运维·服务器